我一直在搜索谷歌以某种方式捕获Python应用程序生成的任何回溯。
如果发生任何错误,我会向自己发送电子邮件/冗余/通知,这会产生追溯(而不是依赖用户向我报告问题)。
我还没找到任何which doesn't involve you doing a try/except。但是当然我不能把我所做的一切都放在单独的try / except子句中,因为我正在编写启动UI的应用程序(PySide / PyQt4 / PySide2 / PyQt5),并且可能会在用户交互时出错。
这是否可行,如果可以,我如何捕获生成的任何回溯?
答案 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模块。