예외 처리
✒️ 2025-05-19 10:21 내용 수정
Do it! 점프 투 파이썬(2017년 발행) 내용을 정리
프로그램 작동 상에 영향을 주는 문제를 처리하여 전체 시스템에 영향을 주지 않도록 하는 행동
// Java의 예외처리
try {
// 실행문
} catch (exceptionType e) {
// 오류 발생 시 실행
} finally {
// 오류 여부와 관계없이 실행
}
예외 처리 기법
try-except문 :try블록 수행 중에 오류가 발생하면except블록이 수행되고, 오류가 생기지 않았다면except블록이 수행되지 않는다.
try:
...
except [발생오류 [as 오류변수]]:
# 오류 발생 시 수행
...
>>> try:
... a = [1, 2, 3]
... print(a[3])
... except:
... print("error occured")
...
error occured
- 여러 개의 오류를 처리할 때
except블록으로 조건을 나누어 사용한다.- 처음 에러가 발생한 구문이 해당
except문을 실행한다.
- 처음 에러가 발생한 구문이 해당
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
- 만약 특정 오류가 발생했을 때 이를 통과시켜야 할 경우
pass문을 사용한다.
try:
...
except 발생오류:
# 오류 회피하기
pass
>>> try:
... a = [1, 2, 3]
... print(a[3])
... except:
... pass
...
>>>
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
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명령어를 사용하여 오류를 강제로 발생 시킬 수 있다.
raise ErrorType
- 예시에서
print()문에는 이상이 없음에도raise명령어로IndexError를 발생 시켜except블록이 수행되었다.
>>> try:
... a = [1, 2, 3]
... print(a[1])
... raise IndexError
... except:
... print("index error")
...
2
index error
예외 만들기
- 프로그램을 작성하다 보면 기존 예외들 외의 다른 예외를 추가해야 하는 경우가 생긴다.
- 이럴 때 Python의 내장 클래스
Exception클래스를 상속하여 예외를 만들 수 있다.__str__메서드를 사용하여print(e)를 수행할 때 오류 메시지를 표시하도록 만들 수 있다.
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)