这是说明问题的代码:
from PyQt4 import QtGui
app = QtGui.QApplication([])
dialog = QtGui.QDialog()
button = QtGui.QPushButton('I crash')
layout = QtGui.QHBoxLayout()
layout.addWidget(button)
dialog.setLayout(layout)
def crash(): raise Exception('Crash!')
button.clicked.connect(crash)
button.click()
print 'I should not happen'
Run Code Online (Sandbox Code Playgroud)
当我运行它时,PyQt4为我处理错误.我的控制台显示"崩溃!"的堆栈跟踪 在其中,我看到'我不应该发生'.
这没有用,因为我已经交了一个包含许多处理程序的大型应用程序,我需要将所有错误强加到我的脸上(并进入我的 - 自动化测试).每次我运行时,错误都会逃脱我的网络,并且它们需要过多且无用的尝试:除了块,在每个处理程序中,只是为了捕获它们.
换句话说,我希望良好的代码非常好,而糟糕的代码则非常糟糕.没有粉刷.
如果已经提出这个问题,我会道歉,但是当我进行电子搜索时,我自然会让成千上万的新手询问基本的错误处理问题(或者更糟糕的是,我让新手询问如何关闭他们任性的异常!;)
如何覆盖PyQt4的默认错误处理,以便我自己传播或记录错误?请不要回答sys.excepthook,它会捕获PyQt4 无法捕获的错误.