是否可以捕获Python应用程序生成的任何回溯?

时间:2016-10-02 08:17:22

标签: python

我一直在搜索谷歌以某种方式捕获Python应用程序生成的任何回溯。

如果发生任何错误,我会向自己发送电子邮件/冗余/通知,这会产生追溯(而不是依赖用户向我报告问题)。

我还没找到任何which doesn't involve you doing a try/except。但是当然我不能把我所做的一切都放在单独的try / except子句中,因为我正在编写启动UI的应用程序(PySide / PyQt4 / PySide2 / PyQt5),并且可能会在用户交互时出错。

这是否可行,如果可以,我如何捕获生成的任何回溯?

1 个答案:

答案 0 :(得分:4)

您可以通过创建自定义sys.excepthook

轻松完成此操作
import sys
import traceback


def report_exception(exc_type, exc_value, exc_tb):
    # just a placeholder, you may send an e-mail here
    print("Type", exc_type)
    print("Value", exc_value)
    print("Tb", ''.join(traceback.format_tb(exc_tb)))


def custom_excepthook(exc_type, exc_value, exc_tb):
    report_exception(exc_type, exc_value, exc_tb)
    sys.__excepthook__(exc_type, exc_value, exc_tb)  # run standard exception hook


sys.excepthook = custom_excepthook

raise RuntimeError("I want to report exception here...")

对于漂亮打印的回溯对象,请参阅traceback模块。