예외가 발생하면 콘솔에 「에러 메시지 + 콜스택」이 출력됩니다.
이게 traceback.
에러 디버깅의 첫 단서이고, 잘 읽는 법을 알면 디버깅 시간이 크게 줄어듭니다.
기본 읽기.
Traceback (most recent call last): 다음에 콜스택이 「가장 오래된 호출 → 가장 최근 호출」 순서.
마지막 줄이 실제 에러 발생 지점.
그 위로 거슬러 올라가며 누가 어떻게 호출했는지 추적.
직접 출력.
import traceback.
try: ...
except: traceback.print_exc() — 현재 예외의 traceback 출력.
traceback.format_exc()로 문자열 받기 → 로깅·외부 전송.
Python 3.11+ 향상된 traceback.
어느 표현식에서 오류 났는지 ^^^로 정확히 표시.
AttributeError: 'NoneType' object has no attribute 'name'에서 result.user.name 중 어디인지 즉시 보임.
디버깅이 훨씬 빨라짐.
원인 추적 — raise from.
raise NewError("...") from original_error — 「원래 에러 → 새 에러」 체인.
traceback에 "The above exception was the direct cause of the following exception"으로 표시.
에러 변환·래핑 시 원인 보존.
한 줄 요약
traceback은 에러의 콜스택 + 발생 지점.
마지막 줄이 핵심, 위로 거슬러 호출 경로 추적.
Python 3.11+는 ^^^로 표현식까지 정확히 표시.
더 알아볼 것
- sys.excepthook — 전역 에러 처리
- Sentry — 에러 자동 수집
- logging.exception — traceback 자동 첨부