traceback이란?traceback은 Python 표준 라이브러리 중 하나로, 에러가 발생했을 때 어느 파일의 몇 번째 줄에서 어떤 경로로 에러가 났는지 상세하게 출력할 수 있게 해줍니다.
Python에서 에러가 발생하면 기본적으로 이런 메시지가 출력됩니다.
Traceback (most recent call last):
File "main.py", line 10, in run
result = my_function()
File "parser.py", line 28, in my_function
doc = open(my_path)
FileNotFoundError: cannot open file
이것이 트레이스백(traceback) 입니다. 에러가 발생하기까지의 함수 호출 경로를 역추적해서 보여줍니다.
except만 쓰면 트레이스백이 사라진다try/except로 에러를 잡으면 트레이스백이 출력되지 않습니다.
try:
result = my_function()
except Exception as e:
print(f"❌ 실패: {e}") # 에러 메시지만 출력
❌ 실패: cannot open file
에러가 났다는 건 알지만 어디서 왜 났는지는 알 수 없습니다.
traceback.print_exc() — 트레이스백 출력traceback.print_exc()를 추가하면 except로 잡은 에러의 상세 정보를 출력할 수 있습니다.
import traceback
try:
result = my_function()
except Exception as e:
print(f"❌ 실패: {e}")
traceback.print_exc() # 트레이스백 출력
❌ 실패: cannot open file
Traceback (most recent call last):
File "main.py", line 10, in run
result = my_function()
File "parser.py", line 28, in my_function
doc = open(my_path)
FileNotFoundError: cannot open file
어느 함수에서 어느 줄을 타고 에러가 났는지 한눈에 파악할 수 있습니다.
Traceback (most recent call last): ← 가장 최근 호출이 맨 아래
File "main.py", line 10, in run ← 파일명, 줄 번호
result = my_function() ← 실행된 코드
File "parser.py", line 28
doc = open(my_path)
FileNotFoundError: cannot open file ← 실제 에러 (여기서 터짐)
💡 트레이스백은 맨 아래줄이 실제 에러입니다. 위로 올라갈수록 에러가 발생하기까지의 호출 경로입니다. 디버깅할 때는 맨 아래부터 읽는 것이 빠릅니다.
하나가 실패해도 나머지는 계속 실행해야 할 때 자주 쓰이는 패턴입니다.
import traceback
tasks = ["task_a", "task_b", "task_c"]
for task in tasks:
try:
result = my_function(task)
print(f"✅ 성공: {task}")
except Exception as e:
print(f"❌ 실패: {e}")
traceback.print_exc() # 상세 로그 남기고 다음 task로 계속 진행
except로 잡아서 나머지 작업은 계속 진행하면서, traceback.print_exc()로 왜 실패했는지 상세 로그를 남겨두는 구조입니다. 안전장치이면서 동시에 디버깅 도구인 셈입니다.
| 함수 | 한 줄 설명 |
|---|---|
traceback.print_exc() | 현재 except 블록의 트레이스백을 출력 |
traceback.format_exc() | 트레이스백을 출력하지 않고 문자열로 반환 |
# 터미널에 출력
traceback.print_exc()
# 문자열로 받아서 로그 파일에 저장할 때
error_log = traceback.format_exc()
한 줄 요약:
traceback.print_exc()는except로 에러를 잡았을 때 "에러가 어디서 왜 났는지"를 상세하게 출력해주는 디버깅 도구입니다.