是否可以捕获Python应用程序生成的任何回溯?(Is it possible to capture any traceback generated by a Python application?)

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

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

我仍然没有发现任何不涉及你尝试/除外的事情 。 但是当然我不能把我所做的一切都放在单独的try / except子句中,因为我正在编写启动UI的应用程序(PySide / PyQt4 / PySide2 / PyQt5),并且可能会出现用户交互错误。

这是可能的,如果是这样,我如何捕获生成的任何回溯?

I've been searching google for a way to somehow capture any traceback generated by a Python application.

I'd like to send an email/slack/notification to myself if any error occurs which generates a traceback (instead of relying on users to report issues to me).

I still haven't found anything which doesn't involve you doing a try/except. But of course I can't put everything I do inside individual try/except clauses since I'm writing applications which launch a UI (PySide/PyQt4/PySide2/PyQt5) and could error on user interaction.

Is this possible, and if so how can I capture any traceback generated?

最满意答案

您可以通过创建自定义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...")

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

You can easily do it by creating custom 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...")

For pretty-printing traceback objects refer to traceback module.

是否可以捕获Python应用程序生成的任何回溯?(Is it possible to capture any traceback generated by a Python application?)

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

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

我仍然没有发现任何不涉及你尝试/除外的事情 。 但是当然我不能把我所做的一切都放在单独的try / except子句中,因为我正在编写启动UI的应用程序(PySide / PyQt4 / PySide2 / PyQt5),并且可能会出现用户交互错误。

这是可能的,如果是这样,我如何捕获生成的任何回溯?

I've been searching google for a way to somehow capture any traceback generated by a Python application.

I'd like to send an email/slack/notification to myself if any error occurs which generates a traceback (instead of relying on users to report issues to me).

I still haven't found anything which doesn't involve you doing a try/except. But of course I can't put everything I do inside individual try/except clauses since I'm writing applications which launch a UI (PySide/PyQt4/PySide2/PyQt5) and could error on user interaction.

Is this possible, and if so how can I capture any traceback generated?

最满意答案

您可以通过创建自定义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...")

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

You can easily do it by creating custom 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...")

For pretty-printing traceback objects refer to traceback module.