Snarf-Ausnahmen für PyQt-Ereignishandler

Hier ist der Code, der das Problem veranschaulicht:

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'

Wenn ich das starte, behandelt PyQt4 den Fehler für mich. Meine Konsole zeigt einen Stack-Trace mit "Crash!" etc. drin, und ich sehe "ich sollte nicht passieren".

Dies ist nicht sinnvoll, da mir eine große Bewerbung mit vielen Handlern ausgehändigt wurde und ich zwingen mussalles ihre Fehler bis in mein Gesicht (und in meine - ahem - automatisierten Tests). Jedes Mal, wenn ich renne, entziehen sich Fehler meinen Netzen, und sie erfordern einen übermäßigen und nutzlosen Versuch: mit Ausnahme von Blöcken in jedem Handler, nur um sie alle zu fangen.

Anders ausgedrückt, ich möchte, dass guter Code sehr gut und schlechter Code sehr schlecht ist. Nicht weiß getüncht.

Entschuldigung, wenn dies bereits gefragt wird, aber wenn ich per E-Search danach suche, werden mir natürlich Tausende von Neulingen gestellt, die grundlegende Fragen zur Fehlerbehandlung stellen (oder, schlimmer noch, Neulinge, die fragen, wie sie ihre eigensinnigen Ausnahmen ausschalten können !;)

Wie überschreibe ich die Standardfehlerbehandlung von PyQt4, damit ich Fehler selbst weitergeben oder protokollieren kann? Und bitte antworte auch nicht sys.excepthook - es fängt die Fehler von PyQt4 aufnicht Fang.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage