예외 처리

✒️ 2025-05-19 10:21 내용 수정

Do it! 점프 투 파이썬(2017년 발행) 내용을 정리


프로그램 작동 상에 영향을 주는 문제를 처리하여 전체 시스템에 영향을 주지 않도록 하는 행동

// Java의 예외처리
try {
	// 실행문
} catch (exceptionType e) {
	// 오류 발생 시 실행
} finally {
	// 오류 여부와 관계없이 실행
}

예외 처리 기법

  1. try-except 문 : try 블록 수행 중에 오류가 발생하면 except 블록이 수행되고, 오류가 생기지 않았다면 except블록이 수행되지 않는다.
try:
	...
except [발생오류 [as 오류변수]]:
	# 오류 발생 시 수행
	...
>>> try:
...     a = [1, 2, 3]
...     print(a[3])
... except:
...     print("error occured")
...     
error occured
try:
	...
except 발생1:
	# 원인1에 의해 오류 발생 시 수행
	...
except 발생2:
	# 원인2에 의해 오류 발생 시 수행
	...
>>> try:
...     a = [1, 2, 3]
...     print(a[3])
...     b = 1 / 0
...     print(b)
... except IndexError as e:
...     print(e)
... except ZeroDivisionError as ze:
...     print(ze)
...     
list index out of range
try:
	...
except ErrorType as e:
	print(e) # 오류 내용이 출력된다.
>>> try:
...     a = [1, 2, 3]
...     print(a[3])
... except IndexError as e:
...     print(e)
...     
list index out of range
try:
	...
except 발생오류:
	# 오류 회피하기
	pass
>>> try:
...     a = [1, 2, 3]
...     print(a[3])
... except:
...     pass
... 
>>> 
  1. try-finally문 : finally 절은 try 블록 수행 도중의 예외 발생에 상관없이 항상 수행된다.
    • 사용한 리소스를 반환할 때(close) 주로 사용한다.
try:
	...
finally:
	# 오류 발생 여부에 상관없이 수행
	...
# 에러 발생 시
>>> try:
...     b = 1 / 0
... except:
...     print("error")
... finally:
...     print("end")
...     
error
end  

# 에러 없을 시
>>> try:
...     b = 3
... except:
...     print("error")
... finally:
...     print("end")
...     
end 
  1. try-else문 : try 블록 수행 중 오류가 발생하면 except 블록이 수행되고, 오류가 생기지 않았다면 else 블록이 수행된다.
try:
	...
except [발생오류 [as 오류변수]]:
	# 오류 발생 시 수행
	...
else:
	# 오류 없을 시 수행
	...
>>> try:
...     a = [1, 2, 3]
...     print(a[4])
... except:
...     print("index error")
... else:
...     print("no index error")
...     
index error


>>> try:
...     a = [1, 2, 3]
...     print(a[1])
... except:
...     print("index error")
... else:
...     print("no index error")
...     
2
no index error

오류 일부러 발생시키기

raise ErrorType
>>> try:
...     a = [1, 2, 3]
...     print(a[1])
...     raise IndexError
... except:
...     print("index error")
...     
2
index error

예외 만들기

class CustomError(Exception):
	# 예외 내용
	def __str__(self):
		return "표시할 에러 메시지"
# 예외만들기.py
class TestError(Exception):
    def __str__(self):
        return "This is custom Error"

def tester():
    print("예외 만들기")

try:
    tester()
    raise TestError
except TestError as e:
    print("Test Error occured")
    print(e)

python_error_handling 1.png