【发布时间】:2019-11-21 07:35:06
【问题描述】:
我正在开发一个使用 PyQt5 创建 GUI 的 Python 项目。我遇到了错误不会终止程序或发送错误消息的问题;该程序会崩溃。在进行一些研究时,我能够在 Reddit 上找到我添加到我的 __init__ 方法中的一段代码。这解决了我的问题,但不幸的是,帖子并没有详细说明解决方案,所以我不确定为什么会这样。
在阅读 Python 文档时,我了解到 sys.excepthook 函数本质上是获取异常,并将其打印到控制台,这是正确的吗?
看起来这段代码正在从sys.excepthook获取异常并将其存储在变量sys._excepthook中,然后定义函数exception_hook,该函数本质上调用sys.excepthook(通过sys._excepthook)。
我的问题是:
1) 为什么需要这个?我知道这是 PyQt 的一个已知问题,异常/错误消息会“丢失”并且程序往往会崩溃。
2) 这段代码是如何解决问题的?
sys._excepthook = sys.excepthook
def exception_hook(exctype, value, traceback):
print(exctype, value, traceback)
sys._excepthook(exctype, value, traceback)
sys.exit(1)
sys.excepthook = exception_hook
【问题讨论】:
标签: python exception pyqt pyqt5 sys