[Pygui] Native wrappers?

Greg Ewing greg.ewing at canterbury.ac.nz
Mon Dec 21 00:55:59 CET 2009


Dan Villiom Podlaski Christiansen wrote:

> The relevant snippet of code in -[PyApplication sendEvent:] looks like this:
> 
> r = PyObject_CallMethod(*self*.app, "handle", "OO", kind, pyevent);
> 
> *if* (r == *NULL*) {
>     PyObject_CallMethod(*self*.app, "report_error", "");
> }
> 
> I'm not terribly familiar with how exceptions work with the Python API, 
> but shouldn't that suffice?

No. Catching and handling exceptions in C code is rather tricky,
especially if you want Python code to subsequently access the
exception using sys.exc_info(), which is what report_error()
is trying to do.

I don't have time right now to explain in detail what needs to
be done. In the meantime I suggest you just call PyErr_WriteUnraisable
if you get an exception in a context where you can't propagate it to
the caller.

(BTW, this would be another good reason to use Pyrex -- it takes
care of all the gory details of exception handling for you.)

-- 
Greg




More information about the Pygui mailing list