打印python堆栈跟踪,不会引发异常

打印python堆栈跟踪,不会引发异常,python,debugging,stack-trace,Python,Debugging,Stack Trace,我的类的一个实例变量发生了一些问题。我想让变量成为一个属性,每当它被访问时,我想打印出指向该点的所有代码的堆栈跟踪,这样我就可以看到它被弄乱的地方。当没有引发异常时,如何打印堆栈跟踪?我知道如果出现异常,我可以执行类似于traceback.format\u tb(sys.exc\u info()[2])的操作 另外,可能有用的是只打印最后3-4个级别,因为前几个级别可能没有那么有趣。: >>def(): ... def g(): ... traceback.print_stack()

我的类的一个实例变量发生了一些问题。我想让变量成为一个属性,每当它被访问时,我想打印出指向该点的所有代码的堆栈跟踪,这样我就可以看到它被弄乱的地方。当没有引发异常时,如何打印堆栈跟踪?我知道如果出现异常,我可以执行类似于
traceback.format\u tb(sys.exc\u info()[2])
的操作

另外,可能有用的是只打印最后3-4个级别,因为前几个级别可能没有那么有趣。

:

>>def():
...   def g():
...     traceback.print_stack()
...   g()
...
>>>f()
文件“”,第1行,在
文件“”,第4行,在f中
文件“”,第3行,在g中

编辑:您还可以使用,获取一个切片(例如,排除前5个级别的堆栈[5://code>),并使用获取打印就绪的堆栈跟踪(
“\n”)。加入(traceback.format_list(…)

,而不是打印到标准输出,如果需要字符串传递给记录器,您可以使用:

''.join(traceback.format_stack())
注意,traceback.format_stack()将stacktrace作为字符串的格式化列表返回,因此您可以根据需要对其进行切片。要获取stacktrace的最后几个元素,可以执行以下操作:

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

其中N是您感兴趣的级别数。

感谢您的编辑,它帮助我实现了一个非常通用的
full\u stack()
函数!
''.join(traceback.format_stack()[-N:])