Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 예외 텍스트와 예외 정보를 얻는 방법

파이썬 코드 실행 중 예외(exception)가 발생하면 이를 try-except 문으로 잡아내어 예외의 유형(type), 오류 메시지(error message), 트레이스백(traceback)을 출력할 수 있습니다. 또한 예외가 발생한 파일 이름과 줄 번호(line number) 같은 상세 정보도 함께 확인할 수 있습니다.

sys.exc_info() 함수란?

발생한 오류에 대한 정보는 크게 세 가지 매개변수로 구성됩니다.

  • Type(유형): 발생한 예외의 종류를 나타냅니다. 예를 들어 ZeroDivisionError, NotImplementedError 등이 여기에 해당합니다.
  • Value(값): 실제 오류 메시지가 담겨 있어 어떤 문제가 발생했는지 설명해 줍니다.
  • Traceback(트레이스백): 오류 발생 시점의 스택 스냅샷을 포함하며, 파일 이름과 줄 번호 등 오류 위치에 관한 다양한 세부 정보를 제공합니다.

sys.exc_info() 함수는 위 세 가지 속성을 하나의 튜플(tuple) 형태로 반환합니다. 참고로 raise 문도 이 세 가지 요소를 인자로 받는 세 인자(three-argument) 형식을 지원합니다.

예외 유형, 파일 이름, 줄 번호 확인하기

다음 예제 코드는 예외가 발생했을 때 예외 유형, 파일 이름, 그리고 줄 번호를 출력하는 방법을 보여줍니다.

import sys, os

try:
    raise NotImplementedError("No error")
except Exception as e:
    exc_type, exc_obj, exc_tb = sys.exc_info()
    fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
    print(exc_type, fname, exc_tb.tb_lineno)

코드 설명

  1. sys.exc_info()를 호출하여 예외 유형(exc_type), 예외 객체(exc_obj), 트레이스백 객체(exc_tb)를 각각 변수에 저장합니다.
  2. exc_tb.tb_frame.f_code.co_filename으로 예외가 발생한 파일의 전체 경로를 얻은 뒤, os.path.split()을 사용해 파일 이름만 추출합니다.
  3. exc_tb.tb_lineno를 통해 예외가 발생한 정확한 줄 번호를 확인할 수 있습니다.

이처럼 sys.exc_info()를 활용하면 단순히 오류 메시지만 출력하는 것을 넘어, 디버깅에 유용한 예외의 유형과 발생 위치까지 체계적으로 파악할 수 있습니다.