지난 포스팅에서 파이썬 표준 라이브러리 중 threading 에 대해서 알아보았습니다.
이번 포스팅에서는 파이썬 표준 라이브러리 중 traceback 에 대해서 공부해 보도록 하겠습니다
파이썬 표준 라이브러리
traceback
traceback 은 우리가 프로그래밍을 하고 실행을 했을때 발생하는 오류를 추적하려 할 때 사용되는 모듈 입니다.
간단하게 아래의 예제 코드를 살펴보겠습니다.
# error_test.py
def a():
return 1 / 0
def b():
a()
def main():
try:
b()
except:
print("오류가 발생했습니다.")
main()
위 코드를 실행시켜 보겠습니다.
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python error_test.py
오류가 발생했습니다.
바로 print 문에 의해서 오류가 발생했다는 메시지를 출력 해 줍니다.
main() 함수가 시작 되면서 b() 함수를 호출하는데 b() 함수에서 a() 함수를 호출해서 1 을 0 으로 나누라는 명령에 오류가 발생해서 “오류가 발생했습니다.” 라고 메시지를 출력을 합니다.
실제로 이런 간단한 프로그램인 경우에는 그나마 괜찮을 수도 있지만 복잡한 프로그램이라면 어디에서 오류가 발생했는지 찾기가 힘들어집니다.
그래서 이런 때 이 프로그램에서 어떤 코드에서 오류가 발생했는지 위치와 원인을 정확히 판단할 수 있도록 traceback 모듈을 사용하여 프로그램을 업그레이드 하는 것입니다.
아래 코드 처럼 오류가 발생한 위치에 traceback 모듈을 적용을 해 보겠습니다.
# traceback_test.py
import traceback
def a():
return 1 / 0
def b():
a()
def main():
try:
b()
except:
print("오류가 발생했습니다.")
print(traceback.format_exc())
main()
이전과 동일한 코드에 print(traceback.format_exe()) 이라는 문장만 추가를 했습니다.
결과는 아래와 같이 나옵니다.
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python traceback_test.py
오류가 발생했습니다.
Traceback (most recent call last):
File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 12, in main
b()
File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 8, in b
a()
File "D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST\test.py", line 5, in a
return 1 / 0
ZeroDivisionError: division by zero
traceback 모듈을 통해 오류 추적을 진행하고 main() 함수에서 b() 함수를 호출하고 b() 함수에서 다시 a() 함수를 호출해서 1 / 0 을 실행하려 했기 때문에 0 으로 나눌 수 없다는 ZeroDivisionError 가 발생했다는 것을 로그를 통해 정확하게 확인을 할 수가 있습니다.
- 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
