Cla*_*diu 57 python debugging stack-trace
我的一个类的实例变量正在发生一些事情.我想让变量成为一个属性,无论何时访问它,我都要打印出导致该点的所有代码的堆栈跟踪,这样我就可以看到它被搞乱了.如果没有引发异常,如何打印堆栈跟踪?我知道如果有例外,我可以做类似的事情traceback.format_tb(sys.exc_info()[2]).
另外可能有用的是仅打印最后3-4个级别,因为前几个级别可能不会那么有趣.
小智 82
>>> 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
Run Code Online (Sandbox Code Playgroud)
编辑:您还可以使用extract_stack,获取切片(例如stack[5:],排除前5个级别)并使用format_list获取打印就绪的堆栈跟踪('\n'.join(traceback.format_list(...)))
如果您需要将字符串传递给记录器,则可以使用:
''.join(traceback.format_stack())
Run Code Online (Sandbox Code Playgroud)
请注意,traceback.format_stack()将堆栈跟踪作为格式化的字符串列表返回,因此您可以随时对其进行切片。要获取stacktrace的最后几个元素,您可以执行以下操作:
''.join(traceback.format_stack()[-N:])
Run Code Online (Sandbox Code Playgroud)
其中N是您感兴趣的级别数。
| 归档时间: |
|
| 查看次数: |
20271 次 |
| 最近记录: |