복붙노트

[PYTHON] 예외를 발생시키지 않고 python 스택 추적을 인쇄하십시오.

PYTHON

예외를 발생시키지 않고 python 스택 추적을 인쇄하십시오.

내 클래스의 인스턴스 변수 중 하나가 사용 중입니다. 변수를 속성으로 만들고 싶습니다. 액세스 할 때마다 그 지점까지 이어지는 모든 코드의 스택 추적을 인쇄하고 싶습니다. 그래서 어디서 엉망인지 볼 수 있습니다. 예외가 발생하지 않은 경우 스택 추적을 어떻게 인쇄합니까? traceback.format_tb (sys.exc_info () [2])와 같은 것을 할 수있는 예외가 있는지 알고 있습니다.

또한 처음 3-4 단계는 아마도 흥미롭지 않을 것이기 때문에 마지막 3-4 단계 만 인쇄하는 것이 유용 할 수 있습니다.

해결법

  1. ==============================

    1.traceback.print_stack () :

    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를 사용하여 print-ready stacktrace ( '\ n '.join (traceback.format_list (...) ))))

  2. ==============================

    2.stdout에 인쇄하는 대신 로거에 전달할 문자열이 필요한 경우 다음을 사용할 수 있습니다.

    stdout에 인쇄하는 대신 로거에 전달할 문자열이 필요한 경우 다음을 사용할 수 있습니다.

    ''.join(traceback.format_stack())
    

    traceback.format_stack ()은 stacktrace를 형식화 된 문자열 목록으로 반환하므로 원하는 경우 슬라이스 할 수 있습니다. stacktrace의 마지막 몇 가지 요소를 얻으려면 다음을 수행하십시오.

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

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

  3. from https://stackoverflow.com/questions/3925248/print-python-stack-trace-without-exception-being-raised by cc-by-sa and MIT license