Truls A. Tangstad <[EMAIL PROTECTED]> wrote: >> it seems that Python exceptions generated within event handlers do >> not get propagated correctly. We use a sys.excepthook to abort >> gracefully with a messagebox from our application, and this seems to >> work in most cases but not within event handlers. > > I think this is by design as most event-triggers are not prepared to > handle an exception caused by an event. > > I had the same problem, but after thinking about it for a while i > realized that having events propagate exceptions to the initiator > would at most times be problematic and probably cause more problems > then what would be gained by what you are trying to achieve. > > Events are often sent from other threads and end up in a thread-queue > in the main thread (event/gui-thread). The gui loops through this > thread and sends events where needed. If the handler of an event > throws an exception, there's now nowhere for it to go, except causing > the event-loop to crash... which Qt (PyQt?) solves by instead printing > the exception and then ditching it. > > I'm sure someone will correct me if I'm off the mark here...
I reckon you have slightly misunderstood my problem. Usually, when an exception is raised from Python code using PyQt, the traceback is printed to standard output and execution of the program continues. I believe this is done by PyQt, but I would appreciate if Phil explained this. The problem is: when the exception is raised from within the overriden method of an event handler (as opposed to an exception raised from within the constructor of a subclass, or from within a slot called by a signal), the exception is *totally* ignored. There is no acknowledgement whatsoever. Nothing. Nada. I have no way to know that my code did not work. Moreover, I will add that the behaviour of just printing the exception on the console and ignore it is inacceptable in our application. We have fixed this by overwriting sys.excepthook with a special function which logs the traceback to a file, displays a message box saying something like "internal error", and finally aborts the application. I would expect the exception raised by the event handler to call our custom excepthook just like other exceptions raised in different contexts, but it would be fine if it *just* printed something on the console. At least, I would know there is a problem. Giovanni Bajo _______________________________________________ PyKDE mailing list [email protected] http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
