How can I obtain the exception object on a generlized except statement?

Duncan Booth duncan.booth at invalid.invalid
Mon Jun 11 02:58:01 EDT 2007


Chris Allen <ca.allen at gmail.com> wrote:

> I am confused on one aspect of exception handling.  If you specify the
> exception object type to match in an except statement it is possible
> to also obtain the exception object itself, but I can't figure out how
> to get the exception object when I don't specify a match.

In most cases you can just catch Exception. If you want to be sure to 
catch deprecated string exceptions also then use sys.exc_info().

try:
 ... something ...
except Exception, e:
   print e

Also what you want to do with it when you've caught it makes a 
difference:

If you are planning on logging a stack backtrace then you'll want the 
traceback as well as the exception, so sys.exc_info() might be indicated 
except that in that case you'll be better off using logging.exception() 
instead.

try:
 ... something ...
except:
   logging.exception("Unexpected error")

If you are just planning on swallowing the exception then you don't want 
any of these: you want to catch the specific exceptions that you expect 
to be raised.

> >>> except (),msg:

Using an empty tuple for the exception specification won't catch any 
exceptions. Not very useful if the tuple is a literal, but it could be 
useful in some obscure situations (e.g. an except clause to handle 
exceptions declared in a specific DLL which might not always be 
present).



More information about the Python-list mailing list