Exceptions from callbacks

Eric Dorland dorland at lords.com
Wed Nov 3 04:39:27 CET 1999

Jonathan Giddy wrote:
> Eric Dorland <dorland at lords.com> writes:
> >I'm writing a Python wrapper for a library. The library stores some
> >callbacks for some events, and with some glue code, get these to call
> >python functions. That's the easy part. Now since its the library these
> >callback and not Python per se, how do you pass an exception back to the
> >interpreter, because you can't return NULL from the callback. Do you
> >just set the exception, and Python will pick up on it?
> Assuming these are synchronous callbacks from within the one thread (Python
> code calls C interface calls library calls C callback calls Python callback),
> you can call PyErr_Clear() before calling the library routine, then return
> if PyErr_Occurred() is true afterwards, return NULL from the C interface.
> See the Python/C API manual, section 1.3 "Exceptions".
> If they happen to be asynchronous callbacks from threads started by the
> library, the simplest solution is to ignore them, maybe calling
> PyErr_PrintEx(0) to warn the user.

You're not understanding exactly. It is synchronous (ie one thread), but
since the library is calling the callback, and not the python
interpreter, I can't return NULL to the interpreter. Basically, is there
a way from inside the callback to say "Wake up python, an exception!",
without having to return NULL to the interpreter, which is impossible
from the callback.


Eric Dorland
dorland at lords.com

More information about the Python-list mailing list