programing

파이썬 예외를 기록하는 방법은?

jooyons 2023. 9. 17. 13:04
반응형

파이썬 예외를 기록하는 방법은?

Python에서 예외를 기록하려면 어떻게 해야 합니까?

몇 가지 옵션을 살펴보니 이 코드를 사용하여 실제 예외 세부 정보에 액세스할 수 있습니다.

import sys
import traceback

try:
    1/0
except:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    traceback.print_exception(exc_type, exc_value, exc_traceback)

어떻게든 그 끈을 받고 싶습니다.print_exception()내가 기록할 수 있도록 stdout에 던집니다.

을 보다.logging.exception(Python Logging 모듈)

import logging 
def foo():
    try:
        some_code()
    except:
        logging.exception('')

이렇게 하면 현재 예외에 대한 추적을 자동으로 다시 가져오고 올바르게 기록할 수 있습니다.

Python 3.5에서는 exc_info 인수에서 예외 인스턴스를 전달할 수 있습니다.

import logging
try:
    1/0
except Exception as e:
   logging.error('Error at %s', 'division', exc_info=e)

당신의 질문에 대답하기 위해서 당신은 문자열 버전을 얻을 수 있습니다.print_exception()기능을 사용합니다.stdout으로 출력하지 않고 문자열 목록으로 추적 메시지를 반환하므로 원하는 작업을 수행할 수 있습니다.예를 들어,

import sys
import traceback

try:
    asdf
except NameError:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
    print ''.join('!! ' + line for line in lines)  # Log it or whatever here

다음을 표시합니다.

!! Traceback (most recent call last):
!!   File "<stdin>", line 2, in <module>
!! NameError: name 'asdf' is not defined

하지만 rlotun에서 제안하는 표준 파이썬 로깅 모듈을 사용하는 것을 확실히 추천합니다.설정이 가장 쉬운 것은 아니지만 사용자 지정이 가능합니다.

로그 예외는 로그 메시지에 exc_info=True 키워드 인수를 추가하는 것처럼 간단합니다. http://docs.python.org/2/library/logging.html 의 Logger.debug 항목을 참조하십시오.

예:

try: 
    raise Exception('lala')
except Exception:
    logging.info('blah', exc_info=True)

출력(물론 로그 핸들러 구성에 저장됨):

2012-11-29 10:18:12,778 - root - INFO - <ipython-input-27-5af852892344> : 3 - blah
Traceback (most recent call last):
  File "<ipython-input-27-5af852892344>", line 1, in <module>
    try: raise Exception('lala')
Exception: lala

먼저 예외 조항에 적절한 예외 유형을 사용하는 것을 고려합니다.그런 다음 예외의 이름을 지정하면 다음과 같이 인쇄할 수 있습니다.

try:
    1/0
except Exception as e:
    print e

Python 버전에 따라 다음을 사용해야 합니다.

except Exception, e

언급URL : https://stackoverflow.com/questions/4508849/how-to-log-python-exception

반응형