Catching Python exceptions in C

Ivan Illarionov ivan.illarionov at gmail.com
Tue Dec 9 10:42:21 CET 2008


On Dec 9, 12:33 pm, Ivan Illarionov <ivan.illario... at gmail.com> wrote:
> On Dec 8, 9:42 pm, Senthil Kumar <senthil... at gmail.com> wrote:
>
> > Hi Pythoneers !
> > Can somebody give a quick solution?
> > I am trying to raise exceptions in python and trying to handle it in
> > C.
> > I am able to raise exceptions successfully. However could not catch
> > those in C.
> > I am using the following function to run the python from C:
> > Pyrun_SimpleString().
> > After the exception is raised, I am checking PyErr_Occurred(). It
> > always returns NULL, and I cannot catch the exception.
> > Pls help me a way out.
>
> > Thanx in advance !
>
> I use something like this:
>
> if (PyErr_Occurred()) {
>     if (PyErr_ExceptionMatches(ExceptionName)) {
>         /* do something about ExceptionName */
>     } else if (PyErr_ExceptionMatches(AnotherExceptionName)) {
>     /* if we want to get the exception string */
>         PyObject *errtype, *errvalue, *traceback;
>         PyErr_Fetch(&errtype, &errvalue, &traceback);
>         if(errvalue != NULL) {
>              PyObject *s = PyObject_Str(errvalue);
>              /*    Now 'PyString_AS_STRING(s)'
>               contains C string of error message
>               do something with it
>              */
>              Py_DECREF(s);
>         }
>         Py_XDECREF(errvalue);
>         Py_XDECREF(errtype);
>         Py_XDECREF(traceback);
>     }
>
> }
>
> Goof luck.

And, as others have said, use 'PyRun_String', not 'PyRun_SimpleString'
Sorry, I missed this in previous reply.



More information about the Python-list mailing list