我正在研究一个使用PyQt5创建GUI的Python项目。我遇到的问题是错误不会终止程序或发送错误消息。该程序将崩溃。在进行一些研究时,我能够找到Reddit上添加到我的__init__
方法中的一小段代码。这解决了我的问题,但是不幸的是,该帖子并没有详细说明该解决方案,所以我不确定为什么这样做。
在阅读Python文档时,我了解sys.excepthook函数本质上是获取异常并将其输出到控制台的,这是正确的吗?
看起来这段代码是从sys.excepthook
获取异常并将其存储在变量sys._excepthook
中,然后定义函数exception_hook
,该函数本质上调用sys.excepthook
(通过{ {1}})。
我的问题是:
1)为什么需要这样做?我了解这是PyQt的一个已知问题,其中异常/错误消息“丢失”,程序容易崩溃。
2)这段代码如何解决问题?
sys._excepthook
答案 0 :(得分:1)
如果sys.excepthook
外部发生异常,则调用try: .... except
函数。因此,如果您想按自己的方式进行管理,则需要编写自己的函数。
在我的应用程序中,丢失的错误信息不会引起问题,但是此类异常不会终止应用程序。
sys._excepthook = sys.excepthook # save original excepthook
def exception_hook(exctype, value, traceback):
print(exctype, value, traceback) # print exception.
sys._excepthook(exctype, value, traceback) # call original excepthoot. I do not why
sys.exit(1) # terminate program if above do not do this
sys.excepthook = exception_hook # overwrite default excepthook
如果是python 3,我建议更改:
import traceback
import sys
def def exception_hook(exctype, value, traceback):
traceback_formated = traceback.format_exception(exctype, value, traceback)
traceback_string = "".join(traceback_formated)
print(traceback_string, file=sys.stderr)
sys.exit(1)
还有sys.__excepthook__
docs可以使用。