python의 예외처리 (try-except, assert)
try-except는 파이썬 예외 처리 시 사용할 수 있다.
try-except의 예외 처리를 위한 분기
try:
# 실행내용
raise Exception("에러테스트") # 에러 발생시키기
except:
# 에러 발생 시 분기
else :
# 예외가 발생하지 않았을 때 분기
finally:
# 예외와 상관없이 실행
예외 만들기
Exception을 상속해 만들 수 있다.
class CustomException(Exception):
def __init__(self):
super().__init__('error message')
예외 발생시키기
python에서 에러를 발생시키는 방법은 대표적으로 raise와 assert가 있다.
raise
프로그래머가 지정한 예외를 발생하도록 강제한다. raise 다음 임의로 발생시킬 에외를 정할 수 있다. 예외가 발생했지만 처리하고 싶지 않으면 raise 다음을 비워두는 것도 가능하다.
>>> raise NameError('Hi There')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: HiThere
assert
assert는 가정 설정문이라고 하여, assert 뒤의 조건이 True가 아니면 AssertError를 발생한다. 개발자가 프로그램을 디버깅할 때 특정 조건이 나올 때까지 계속 테스트할 수 있도록 만들어 줄 때도 쓰인다.
# assert 조건, '메세지' 로 쓸 수 있고 메세지는 생략가능하다.
>>> assert type(num) is int, f'{num} is not int type.'
#결과
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
예외 상황을 이용한 디버깅 메세지 출력
예외처리 시, 에러가 발생한 파일명과 라인 번호, 에러 내용을 출력하고 싶으면 아래를 참고한다.
try:
raise TypeError("Hello, World!") # line 2
except Exception as e:
print(
type(e).__name__, # TypeError
__file__, # /tmp/example.py
e.__traceback__.tb_lineno,
e
)