这里是一个展示问题的代码示例:
当我运行时,PyQt4会处理错误。我的控制台显示了一个带有“Crash!”等内容的堆栈跟踪,并且我看到“不应该发生”的字样。
这并不是很有用,因为我得到了一个具有许多处理程序的大型应用程序,我需要将所有错误都强制上升到我的界面(以及我的-咳咳-自动化测试)。每次运行时,错误都会逃脱我的网,它们需要过多且无用的try:except块,在每个处理程序中进行才能捕获它们。
换句话说,我希望好代码非常好,而坏代码非常糟糕。不是掩盖。
如果已经提出了这个问题,我表示歉意,但当我进行电子搜索时,我自然会得到成千上万个新手提出基本的错误处理问题(或者更糟糕的是,我得到新手询问如何关闭他们不良异常的问题!)
我如何覆盖PyQt4的默认错误处理,以便我可以自己传播或记录错误?请不要回答sys.excepthook - 它会捕获PyQt4没有捕获的错误。
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'
当我运行时,PyQt4会处理错误。我的控制台显示了一个带有“Crash!”等内容的堆栈跟踪,并且我看到“不应该发生”的字样。
这并不是很有用,因为我得到了一个具有许多处理程序的大型应用程序,我需要将所有错误都强制上升到我的界面(以及我的-咳咳-自动化测试)。每次运行时,错误都会逃脱我的网,它们需要过多且无用的try:except块,在每个处理程序中进行才能捕获它们。
换句话说,我希望好代码非常好,而坏代码非常糟糕。不是掩盖。
如果已经提出了这个问题,我表示歉意,但当我进行电子搜索时,我自然会得到成千上万个新手提出基本的错误处理问题(或者更糟糕的是,我得到新手询问如何关闭他们不良异常的问题!)
我如何覆盖PyQt4的默认错误处理,以便我可以自己传播或记录错误?请不要回答sys.excepthook - 它会捕获PyQt4没有捕获的错误。
PyQt
事件循环运行的地方(我认为这是一个不同的线程),因此你实际上是在询问如何在线程之间移动异常。 - tacaswellsys.excepthook
吗?它可以捕获那个异常。 - Avaris