Catching Python exceptions in C

Ivan Illarionov ivan.illarionov at gmail.com
Tue Dec 9 10:33:37 CET 2008


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.



More information about the Python-list mailing list