On 02/08/2012 09:57, rahul wrote: > I am implementing a C extension module, during this I saw that when I > set the global error indicator and error message through > PyErr_SetString() API and return false. > > But it doesn't throw any error when I tried to check the error > through sys.exc_info() then it returns (NULL, NULL, NULL) tuple. > > When I return NULL through the C extension module's function then it > works correctly and throws the exception as expected. > > The skeleton looks like: > > static PyObject* check(PyObject* sef, PyObject* args) { PyObject* > input = NULL; if (!PyArg_ParseTuple(args, "O", &input)){ return > NULL; } ..... ..... PyErr_SetString(PyExc_Exception, "Throwing Error > through check function"); Py_RETURN_FALSE; } > > Any idea on why this is happening? Any help will be appreciated.
Because you're returning False. You should be returning NULL. Which is why it works when you do :) Have a look at the first line of this page: http://docs.python.org/py3k/extending/extending.html#intermezzo-errors-and-exceptions Which piece of documentation led you to think that returning False was the thing to do here? Perhaps there's a doc that needs fixing? TJG -- http://mail.python.org/mailman/listinfo/python-list