我正在编写一些可以在堆栈深处生成异常的代码,并且我有一个更靠近顶部的层,它捕获这些异常并将它们发送给错误处理模块进行处理。我想要的是错误处理模块能够将堆栈跟踪打印到其错误日志中,但我发现很难弄清楚这样做的方法是什么。
关于背景的一些说明:
代码是多线程的,所以我不确定 sys.last_traceback 的行为
我尝试在异常本身的构造函数中捕获堆栈。sys.last_traceback 在这种情况下有时是 None (因为它只存在于未处理的异常的情况下),并不总是正确的。我目前正在玩弄使用
self.stack = traceback.format_stack()[:-2]
在异常的构造函数中,虽然这在信息方面看起来很有希望,但感觉不是“正确”的方法
我能够找到的所有如何执行此操作的示例都显示了如何在 except 块中打印堆栈跟踪,而不是在以后的一些错误处理模块中,这似乎与我想要的行为不同。(例如,请参阅从 Python 代码中的方法打印当前调用堆栈)
我已经在 python 文档(http://docs.python.org/library/traceback.html)中挖掘了追溯模块,并且无法弄清楚这是否符合我的要求。它似乎主要关注格式化回溯,因为您可能从 sys.last_traceback 检索。它有一些使用示例,但没有一个与我正在尝试做的事情一致。
我不相信我是第一个想要这样做的人,所以我一定错过了一些东西。任何指向正确方向的指针都非常感谢。