Exception as the primary error handling mechanism?

Ulrich Eckhardt doomster at knuut.de
Sat Jan 2 13:01:28 CET 2010


Peng Yu wrote:
> Could somebody let me know how the python calls and exceptions are
> dispatched? Is there a reference for it?

I'm not a Python expert, but I have read some parts of the implementation. 
Hopefully someone steps up if I misrepresent things here...

In order to understand Python exception handling, take a look at various C 
function implementations. You will see that they commonly return a pointer 
to a Python object (PyObject*), even if it is a pointer to the 'None' 
singleton. So, a function in Python _always_ returns something, even if it 
is 'None'.

If, at the C level, a function doesn't return anything (i.e. a C NULL 
pointer) that means that the function raised an exception. Checking this 
pointer is pretty easy, typically you check that, clean up and return NULL 
yourself. Further functions for manipulating the exception stack and 
declarations of exception types and singletons are found in pyerrors.h (in 
Python 2.5, at least).

I mentioned an "exception stack" above, though I'm not 100% sure if that is 
the proper term. I think that exceptions can be stacked upon each other 
(e.g. an HTTPD throwing a high-level RequestError when it encounters a low-
level IOError) and that that is also how the backtrace is implemented, but 
I'm not sure about that.


Hopefully someone can confirm or correct me here and that it helped you.

Cheers!

Uli





More information about the Python-list mailing list