Обработчики событий PyQt перехватывают исключения

Вот код, который иллюстрирует проблему:

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!» и т.д. в нем, и я вижу «я не должен случиться».

Это бесполезно, потому что мне передали большое приложение со многими обработчиками, и мне нужно принудительновсе их ошибки мне в лицо (и в мои - гм - автоматические тесты). Каждый раз, когда я запускаю, ошибки уходят из моих сетей, и они требуют чрезмерной и бесполезной попытки: за исключением блоков, внутри каждого обработчика, просто чтобы перехватить их все.

Другими словами, я хочу, чтобы хороший код был очень хорошим, а плохой - очень плохим. Не побеленный.

Извиняюсь, если об этом уже спрашивают, но когда я ищу его в электронном виде, я, естественно, получаю тысячи новичков, задающих базовые вопросы по обработке ошибок (или, что еще хуже, я получаю новичков, спрашивающих, как отключить их странные исключения !;)

Как переопределить обработку ошибок по умолчанию в PyQt4, чтобы я мог сам распространять или регистрировать ошибки? И, пожалуйста, также не отвечайте на sys.excepthook - он ловит ошибки, которые PyQt4не ловить.

Ответы на вопрос(2)

Ваш ответ на вопрос