[PyQt] [BUG] No exception reports in a QThread with Python 3
Phil Thompson
phil at riverbankcomputing.com
Wed Feb 20 10:21:48 GMT 2013
On Sun, 3 Feb 2013 14:55:51 +0000, Richie Ward <richies at gmail.com> wrote:
> If you run the following code with Python 3, you will not recieve a
> exception; dispite it being blatently wrong.
> import sys
> from PyQt4 import QtGui, QtCore
>
> class FooThread(QtCore.QThread):
>
> def run(self):
> beeswax
> return
>
>
> if __name__ == "__main__":
> app = QtGui.QApplication(sys.argv)
>
> ft = FooThread()
> ft.start()
> sys.exit(app.exec_())
>
>
>
> Avaris on #pyqt @ freenode managed to come up with this workaround:
>
> import sys
> import time
> import traceback
> from PyQt4 import QtGui, QtCore
>
> def excepthook(exc_type, exc_val, tracebackobj):
> message = ''.join(traceback.format_exception(exc_type, exc_val,
> tracebackobj))
>
> print('EXCEPTHOOK')
> print(message)
> print('*'*30)
>
> sys.excepthook = excepthook
>
> class FooThread(QtCore.QThread):
> def run(self):
> time.sleep(1)
> beeswaxThread
>
> class FooObject(QtCore.QObject):
> finished = QtCore.pyqtSignal()
>
> def run(self):
> time.sleep(2)
> beeswaxObject
> self.finished.emit()
>
> if __name__ == "__main__":
> app = QtCore.QCoreApplication(sys.argv)
>
> thread = QtCore.QThread()
> fooObject = FooObject()
> fooObject.moveToThread(thread)
> thread.started.connect(fooObject.run)
> fooObject.finished.connect(thread.quit)
>
> fooThread = FooThread()
>
> thread.start()
> fooThread.start()
>
> QtCore.QTimer.singleShot(3000, app.quit)
> sys.exit(app.exec_())
>
> My test system that I use to reproduce this is:
> PyQt 4.9.6 - Built from source.
> Ubuntu 12.10
> Pythion 3.2
>
> The guys on IRC confirmed this was a bug for me too.
Should be fixed in tonight's SIP snapshot (and current hg).
Thanks,
Phil
More information about the PyQt
mailing list