ProgramingTip

예외 발생없이 우수한 스택 추적 인쇄

bestdevel 2021. 1. 7. 21:28
반응형

예외 발생없이 우수한 스택 추적 인쇄


내 클래스의 인스턴스 변수 중 하나에 문제가 발생했습니다. 변수를 속성으로 생성 액세스 할 때마다 해당 지점까지 이어지는 모든 코드의 스택 추적을 인쇄하여 어디에서 엉망인지 알 수 있습니다. 예외가 발생하지 않을 때 스택 추적을 어떻게 인쇄합니까? 예외가 있는지 알고 있습니다 traceback.format_tb(sys.exc_info()[2]).

또한 유용한 것은 마지막 3-4 레벨 만 인쇄하는 것입니다. 처음 몇 개는 그다지 흥미롭지 않을 것이기 때문입니다.


traceback.print_stack():

>>> def f():
...   def g():
...     traceback.print_stack()
...   g()
...
>>> f()
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in f
  File "<stdin>", line 3, in g

편집 : 당신은 또한 사용할 수있는 extract_stack 조각을, (예를 들어 stack[5:]처음 5 개 수준의 제외에 대한) 및 사용 format_list를 인쇄 준비 트레이 스 택스를 위해 ( '\n'.join(traceback.format_list(...)))


표준 출력으로 인쇄하는 대신 로거에 필요한 경우 다음을 사용할 수 있습니다.

''.join(traceback.format_stack())

traceback.format_stack ()은 stacktrace를 형식화 된 메뉴 목록으로 반환하려는대로 할 수 있습니다. stacktrace의 마지막 몇 가지 요소를 얻으려면 다음을 수행 할 수 있습니다.

''.join(traceback.format_stack()[-N:])

여기서 N은 관심있는 수준의 수입니다.

ReferenceURL : https://stackoverflow.com/questions/3925248/print-python-stack-trace-without-exception-being-raised

반응형