Python sys.excepthook函数如何与PyQt5一起工作?

Python sys.excepthook函数如何与PyQt5一起工作?,python,exception,pyqt,pyqt5,sys,Python,Exception,Pyqt,Pyqt5,Sys,我正在从事一个Python项目,该项目使用PyQt5创建GUI。我遇到了一个问题,错误不会终止程序或发送错误消息;程序会崩溃。在做一些研究时,我在Reddit上找到了一段代码,并将其添加到了我的\uuu init\uu方法中。这解决了我的问题,但不幸的是,这篇文章并没有详细阐述解决方案,所以我不知道为什么会这样 在阅读Python文档时,我了解到,sys.excepthook函数基本上获取异常,并将其打印到控制台,是否正确 这段代码似乎是从sys.excepthook获取异常,并将其存储在变量s

我正在从事一个Python项目,该项目使用PyQt5创建GUI。我遇到了一个问题,错误不会终止程序或发送错误消息;程序会崩溃。在做一些研究时,我在Reddit上找到了一段代码,并将其添加到了我的
\uuu init\uu
方法中。这解决了我的问题,但不幸的是,这篇文章并没有详细阐述解决方案,所以我不知道为什么会这样

在阅读Python文档时,我了解到,
sys.excepthook
函数基本上获取异常,并将其打印到控制台,是否正确

这段代码似乎是从
sys.excepthook
获取异常,并将其存储在变量
sys.\u excepthook
中,然后定义函数
exception\u hook
,该函数本质上调用
sys.excepthook

我的问题是:

1) 为什么需要这样做?我知道这是PyQt的一个已知问题,其中异常/错误消息会“丢失”,程序会崩溃

2) 这段代码是如何解决问题的

sys.\u excepthook=sys.excepthook
def异常挂钩(类型、值、回溯):
打印(类型、值、回溯)
系统\u异常挂钩(类型、值、回溯)
系统出口(1)
sys.excepthook=exception\u hook

如果异常发生在
try:..之外,则调用
sys.excepthook
函数。。。。除了
。因此,如果您想以自己的方式管理它,您需要编写自己的函数

在我的应用程序中,我并没有遇到错误信息丢失的问题,但这种异常不会终止应用程序

sys.\u excepthook=sys.excepthook#保存原始excepthook
def异常挂钩(类型、值、回溯):
打印(类型、值、回溯)#打印异常。
sys._excepthook(exctype,value,traceback)#调用原始excepthoot。我不知道为什么
系统退出(1)#如果上面没有这样做,则终止程序
sys.excepthook=exception_hook#覆盖默认excepthook
如果是python 3,我建议更改:

导入回溯
导入系统
def异常挂钩(exctype、值、回溯):
traceback\u Formatted=traceback.format\u异常(exctype,value,traceback)
traceback_string=“”.join(已格式化的traceback_)
打印(回溯字符串,文件=sys.stderr)
系统出口(1)

还有一个
sys.\uuuu excepthook.\uuuu
可以使用。

我试着编辑这个,然后意识到我需要更改很多东西。。。所以我试着回到你原来的。。。请拒绝我的编辑,因为我正在添加我自己的答案(基于您的答案)