Catching Python exceptions in C
Ivan Illarionov
ivan.illarionov at gmail.com
Tue Dec 9 04:42:21 EST 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