Python에서 스택 추적 인쇄

Muhammad Waiz Khan 2023년1월30일
  1. traceback 모듈을 사용하여 Python에서 스택 추적 인쇄
  2. logging.exception() 메서드를 사용하여 Python에서 스택 추적 인쇄
Python에서 스택 추적 인쇄

이 튜토리얼에서는 Python에서 프로그램 실행을 중지하지 않고 스택 추적을 인쇄하는 다양한 방법을 살펴봅니다.

스택 추적에는 특정 시간에 활성 메서드 호출 목록이 포함됩니다. 다음 방법을 사용하여 Python에서 스택 추적을 인쇄할 수 있습니다.

traceback 모듈을 사용하여 Python에서 스택 추적 인쇄

traceback 모듈은 Python에서 스택 추적을 추출, 형식 지정 및 인쇄하는 기능을 제공합니다. traceback.format_exc() 메서드는 traceback 개체의 예외 및 스택 추적 항목에 대한 정보가 포함된 문자열을 반환합니다.

format_exc() 메소드를 사용하여 tryexcept 문으로 스택 추적을 인쇄할 수 있습니다. 아래 예제 코드는 Python에서 traceback.format_exc() 메서드를 사용하여 스택 추적을 인쇄하는 방법을 보여줍니다.

import traceback
import sys

try:
    myfunction()
except Exception:
    print(traceback.format_exc())

출력:

Traceback (most recent call last):
  File "C:\Test\test.py", line 5, in <module>
    myfunction()
NameError: name 'myfunction' is not defined

print() 함수를 사용하는 대신 logger.debug() 메서드를 사용하여 출력을 기록할 수도 있습니다. 로깅은 디버깅을 더 쉽게 만들 수 있기 때문입니다. 다음 메서드에서 logger.debug() 메서드를 사용하여 Python에서 스택 추적을 기록할 수 있습니다.

import logging
import traceback

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

try:
    myfunction()
except Exception:
    logger.debug(traceback.format_exc())

출력:

DEBUG:__main__:Traceback (most recent call last):
  File "C:\Test\test.py", line 8, in <module>
    myfunction()
NameError: name 'myfunction' is not defined

logging.exception() 메서드를 사용하여 Python에서 스택 추적 인쇄

또한 logging 모듈의 logging.exception() 메서드를 사용하여 Python에서 스택 추적을 얻을 수도 있습니다. logging.exception() 메서드는 예외 정보가 포함된 메시지를 기록합니다. 이를 사용하여 다음과 같은 방식으로 Python에서 스택 추적을 인쇄할 수 있습니다.

import logging
import traceback

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

try:
    myfunction()
except Exception:
    logging.info("General exception noted.", exc_info=True)

출력:

INFO:root:General exception noted.
Traceback (most recent call last):
  File "C:\Test\test.py", line 8, in <module>
    myfunction()
NameError: name 'myfunction' is not defined