>  기사  >  백엔드 개발  >  Python에서 포착되지 않은 예외를 기록하는 방법은 무엇입니까?

Python에서 포착되지 않은 예외를 기록하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-22 23:54:29843검색

How to Log Uncaught Exceptions in Python?

Python에서 포착되지 않은 예외 기록

Python 프로그램에서 예외가 발생하고 현재 실행 블록 내에서 처리되지 않으면 자동으로 표준 오류(stderr)로 인쇄됩니다. 이 동작은 특히 로깅 또는 디버깅 목적으로 모든 예외를 캡처하려는 경우 불편할 수 있습니다.

이 문제를 해결하려면 캡처되지 않은 예외를 자동으로 출력하도록 로깅 모듈을 구성할 수 있습니다. 다음은 login.Exception() 함수를 활용하는 솔루션입니다.

<code class="python">try:
    raise Exception('Throwing a boring exception')
except Exception as e:
    logging.exception(e)</code>

이 접근 방식은 효과적이지만 각 예외를 명시적으로 처리하고 로깅해야 합니다. 보다 자동화된 솔루션을 위해 포착되지 않은 예외 처리를 담당하는 Python의 sys.Exceptionhook 함수를 재정의할 수 있습니다.

다음은 다음과 같은 추가 기능을 포함하는 전체 로깅 구성의 예입니다.

  • 정상적인 프로그램 종료를 위해 키보드 인터럽트(Ctrl C) 이벤트 무시
  • 예외 보고를 위해 로깅 모듈의 형식 지정 기능 활용
  • 처리되지 않은 예외를 stderr 대신 stdout에 출력
<code class="python">import sys
import logging

logger = logging.getLogger(__name__)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

def handle_exception(exc_type, exc_value, exc_traceback):
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return

    logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

sys.excepthook = handle_exception

if __name__ == "__main__":
    raise RuntimeError("Test unhandled")</code>

이 구성을 사용하면 포착되지 않은 모든 예외가 로깅 모듈에 의해 자동으로 기록됩니다.

위 내용은 Python에서 포착되지 않은 예외를 기록하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.