print python stack trace without exception being raised

后端 未结 2 1334
情话喂你
情话喂你 2020-12-07 18:43

Something is happening with one of my class\'s instance variables. I want to make the variable a property, and whenever it is accessed I want to print out the stack trace of

相关标签:
2条回答
  • 2020-12-07 19:07

    Instead of printing to stdout, if you need a string to pass to a logger you can use:

    ''.join(traceback.format_stack())
    

    Note, that traceback.format_stack() returns the stacktrace as a formatted list of strings, so you can slice it anyway you want. To get the last few elements of the stacktrace you could do:

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

    Where N is the number of levels you are interested in.

    0 讨论(0)
  • 2020-12-07 19:11

    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
    

    Edit: You can also use extract_stack, take a slice (e.g. stack[5:] for exclude the first 5 levels) and use format_list to get a print-ready stacktrace ('\n'.join(traceback.format_list(...)))

    0 讨论(0)
提交回复
热议问题