PyQt event handlers snarf wyjątki

Oto kod ilustrujący problem:

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'

Kiedy to uruchomię, PyQt4 obsługuje dla mnie błąd. Moja konsola wyświetla ślad stosu za pomocą „Crash!” itd., a ja widzę „nie powinienem się zdarzyć”.

Nie jest to przydatne, ponieważ otrzymałem dużą aplikację z wieloma procedurami obsługi i muszę ją wymusićwszystko ich błędy na mojej twarzy (i do mojego - ahem - automatyczne testy). Za każdym razem, gdy uruchamiam, błędy wymykają się z moich sieci, a one wymagałyby nadmiernej i bezużytecznej próby: oprócz bloków, wewnątrz każdego programu obsługi, tylko po to, by złapać je wszystkie.

Innymi słowy, chcę, aby dobry kod był bardzo dobry, a zły kod - bardzo zły. Nie bielony.

Przepraszam, jeśli już o to poproszono, ale kiedy szukam go w e-mailu, naturalnie napotykam tysiące początkujących, którzy zadają podstawowe pytania dotyczące obsługi błędów (lub, co gorsza, dostaję początkujących, którzy pytają, jak wyłączyć ich krępujące wyjątki !;)

W jaki sposób mogę zastąpić domyślną obsługę błędów PyQt4, dzięki czemu mogę samodzielnie propagować lub rejestrować błędy? I proszę też nie odpowiadać na sys.excepthook - przechwytuje błędy, które PyQt4nie łapać.

questionAnswers(2)

yourAnswerToTheQuestion