[PyKDE] problem with exceptions within events

Giovanni Bajo rasky at develer.com
Thu Feb 24 12:11:09 GMT 2005

Toby Dickenson <tdickenson at devmail.geminidataloggers.co.uk> wrote:

> Ive attached a test script based on your original report. I cant reproduce
> problem here with sip 4.0.1, PyQt 3.1.2, qt 3.3.3

Thanks for doing this.

The problem can be reproduced if you convert your app.processEvents() call
to app.exec_loop(). In that case, I cannot see the traceback anymore.
(Again, I'm using Qt 3.3.4, PyQt 3.14, SIP 4.2).

There is also another difference: on my computer, the script aborts whenever
it hits the first exception. For instance, it aborts on the app.sendEvent()
call, and I never see the following string "you should see an exception
above" on the screen. Thus, to reproduce the problem with exec_loop(), I
have commented out the first sendEvent() call.

I don't know if it is related, but my Qt is compiled with -no-exceptions. I
know that Python and C++ exceptions are not related, but I don't know if SIP
converts exceptions on bindings boundaries (I know other similar wrapping
tools do that). Could Phil enlighten us on this?

To sum it up. With this script:

import sys

def foo(*args):
    print "except hook"
sys.excepthook = foo

from qt import *
class W(QWidget):
    def customEvent(self, e):
        print >> sys.stderr,'in event handler....'
        1/0 # gratuitous exception.... lets see how it gets handled
w = W()

#print >> sys.stderr,'about to send event....'
#app.sendEvent(w, QCustomEvent(QEvent.User))
#print >> sys.stderr,'you should see an exception logged above\n\n'

print >> sys.stderr, 'about to post event, should see nothing yet....'
app.postEvent(w, QCustomEvent(QEvent.User))
print >> sys.stderr, 'about to process that event....'
print >> sys.stderr,'you *should* see the same exception logged again.'
print >> sys.stderr,'"Giovanni Bajo" <rasky at develer.com> reports that it is

print 'done'

I get this output:

about to post event, should see nothing yet....
about to process that event....
in event handler....

Giovanni Bajo

More information about the PyQt mailing list