Python Exception 발생시 해당 소스, 라인 출력하기
예외처리(try-except)를 하지 않고 에러가 발생하는 경우에는 어느 라인이 문제가 되었는지 바로 나옵니다.
하지만 예외처리를 핸들링한 경우 에러는 처리하되 어디서 문제가 되었는지는 찾기 어려울 수도 있습니다.
예를 들어 아래 소스의 경우는 누가 봐도 try에서 실행하는 4/0 이 부분이 문제가 됩니다.
try:
if 4/0:
print('success')
else:
print('fail')
except Exception as e:
print(e) # division by zero
하지만 프로그램이 다른 프로그램을 호출하는 경우 또는 한 프로그램이 몇 천 라인이 넘는 경우에는
위처럼 직관적으로 저기가 문제다. 라고 찾기 어려울 수도 있습니다.
예를 들어 A에서 B 함수를 호출하는 경우를 보겠습니다.
A - caller.py
from callee import *
try:
callee_method1()
callee_method2()
except Exception as e:
print(e)
B - callee.py
def callee_method1():
print(4/0)
def callee_method2():
print(1/5)
caller.py에서 예외를 잘 잡긴 하나 어느 라인이 문제인지는 나오지 않습니다.
이 때 예외 발생 부분을 제일 심플하게 알아볼 수 있는 방법이 traceback 패키지 사용입니다.
traceback를 추가해 caller.py를 살펴보면
from callee import *
import traceback
try:
callee_method1()
callee_method2()
except Exception as e:
print(traceback.format_exc())
예외처리는 당연하고 예외 발생 지점을 정확히 출력합니다.
아래는 수행 결과입니다.
Traceback (most recent call last):
File "C:/Users/PycharmProjects/TestProject/caller.py", line 5, in <module>
callee_method1()
File "C:\Users\PycharmProjects\TestProject\callee.py", line 2, in callee_method1
print(4/0)
ZeroDivisionError: division by zero
traceback 사용말고 sys 패키지를 사용해 정보를 언패킹하는 방법도 있습니다.
sys 패키지 사용 링크도 첨부합니다.
같이 읽어보면 좋은 글
2022.12.27 - [파이썬/가상화폐] - [전자책] 바이낸스 코인선물자동매매 시스템 개발 방법을 담은 책이 출시되었습니다.
2022.11.05 - [파이썬/가상화폐] - [공지] 코인거래소별 프리미엄 체크봇 개발 가이드와 풀소스 전자책 | binance bybit | 업비트 김치프리미엄
'파이썬 > 기초문법' 카테고리의 다른 글
Python Mutable vs Immutable / Mutable / Immutable (0) | 2020.03.16 |
---|---|
Python 클래스에 대해 1 (0) | 2020.03.15 |
Python Map에 대한 이해 (1) | 2020.02.14 |
Python ==과 is의 차이 (0) | 2020.02.12 |
Relative imports in Python 3 (0) | 2020.02.02 |
댓글