try - except. How to identify errors unknown in advance?

Frederic Rentsch anthra.norell at bluewin.ch
Wed Nov 16 13:39:32 EST 2011


On Wed, 2011-11-16 at 09:09 -0800, Chris Kaynor wrote:
> On Wed, Nov 16, 2011 at 8:57 AM, Frederic Rentsch
> <anthra.norell at bluewin.ch> wrote:
> > Hi all,
> >
> >
> > I'd like to log MySQL errors. If I do:
> >
> >        try: (command)
> >        except MySQLdb.OperationalError, e: print e
> >
> > I may get something like:
> >
> >        (1136, "Column count doesn't match value count at row 1")
> >
> > If I don't know in advance which error to expect, but on the contrary
> > want to find out which error occurred, I can catch any error by omitting
> > the name:
> >
> >        except: (handle)
> >
> > But now I don't have access to the error message 'e'. I'm sure there's a
> > way and it's probably ridiculously simple.
> 
> except Exception, e: (or, in Py3, except Exception as e is prefereed).
> 
> Note that you should generally avoid bare except statements "except:"
> as that will catch everything, including KeyboardInterrupt and
> SystemExit which may not be desirable.
> 
> Even without saving the exception in the except statement, you can get
> the type, value, and traceback with the sys.exc_info command. See
> http://docs.python.org/library/sys.html#sys.exc_info
> 
> For example:
> 
> py>import sys
> py>try:
> py> raise RuntimeError
> py> except:
> py> print sys.exc_info()
> py>
> (<type 'exceptions.RuntimeError'>, RuntimeError(), <traceback object
> at 0x0000000002371588>)

Chris, Thanks very much! Great help!

Frederic





More information about the Python-list mailing list