traceback 사용하기

Tasker_Jang·2026년 3월 20일

1. traceback이란?

traceback은 Python 표준 라이브러리 중 하나로, 에러가 발생했을 때 어느 파일의 몇 번째 줄에서 어떤 경로로 에러가 났는지 상세하게 출력할 수 있게 해줍니다.


2. 트레이스백이란?

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) 입니다. 에러가 발생하기까지의 함수 호출 경로를 역추적해서 보여줍니다.


3. except만 쓰면 트레이스백이 사라진다

try/except로 에러를 잡으면 트레이스백이 출력되지 않습니다.

try:
    result = my_function()
except Exception as e:
    print(f"❌ 실패: {e}")   # 에러 메시지만 출력
❌ 실패: cannot open file

에러가 났다는 건 알지만 어디서 왜 났는지는 알 수 없습니다.


4. 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

어느 함수에서 어느 줄을 타고 에러가 났는지 한눈에 파악할 수 있습니다.


5. 트레이스백 읽는 법

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  ← 실제 에러 (여기서 터짐)

💡 트레이스백은 맨 아래줄이 실제 에러입니다. 위로 올라갈수록 에러가 발생하기까지의 호출 경로입니다. 디버깅할 때는 맨 아래부터 읽는 것이 빠릅니다.


6. 여러 작업을 순회할 때 유용한 패턴

하나가 실패해도 나머지는 계속 실행해야 할 때 자주 쓰이는 패턴입니다.

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()왜 실패했는지 상세 로그를 남겨두는 구조입니다. 안전장치이면서 동시에 디버깅 도구인 셈입니다.


7. 핵심 정리

함수한 줄 설명
traceback.print_exc()현재 except 블록의 트레이스백을 출력
traceback.format_exc()트레이스백을 출력하지 않고 문자열로 반환
# 터미널에 출력
traceback.print_exc()

# 문자열로 받아서 로그 파일에 저장할 때
error_log = traceback.format_exc()

한 줄 요약: traceback.print_exc()except로 에러를 잡았을 때 "에러가 어디서 왜 났는지"를 상세하게 출력해주는 디버깅 도구입니다.

profile
ML Engineer 🧠 | AI 모델 개발과 최적화 경험을 기록하며 성장하는 개발자 🚀 The light that burns twice as bright burns half as long ✨

0개의 댓글