如何在Python中获取堆栈跟踪字符串而不抛出异常?

24

traceback.format_exc()

可以通过引发异常来获取它。

traceback.print_stack()

打印堆栈时不需要异常,但它不会返回字符串。

似乎在Python中没有方法可以在不引发异常的情况下获取堆栈跟踪字符串?

4个回答

34

如果您想要方便地访问模块、函数名称和行号,可以使用traceback.extract_stack();如果只是想要看起来像traceback.print_stack()输出的字符串,则可以使用''.join(traceback.format_stack())


9
请注意,即使使用''.join,由于format_stack()的元素包含\n,您仍将获得多行字符串。 - Thomas Ahle
我在我的应用程序中使用 format_stack 得到的堆栈跟踪有很多我不感兴趣的层,而且通常调试器永远不会选择它们。在 Flask 应用程序中,对于我来说,format_exception 噪声较少,并且看起来更接近于我的运行输出中的正常堆栈转储:https://dev59.com/tlIG5IYBdhLWcg3wyEhG - phyatt


2
使用inspect模块。特别是inspect.currentframe()函数,整个模块都是为了在给定时间查看程序状态而存在的。
这里有一些有用的inspect技巧(链接)

1
同时也可以尝试使用“py-spy”模块,它可以连接到Python进程并获取即时堆栈转储。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接