GNU Info

Info Node: (python2.1-tut.info)Exceptions Can Be Classes

(python2.1-tut.info)Exceptions Can Be Classes


Prev: Odds and Ends Up: Odds and Ends
Enter node , (file) or (file)node

Exceptions Can Be Classes
-------------------------

User-defined exceptions are no longer limited to being string objects
-- they can be identified by classes as well.  Using this mechanism it
is possible to create extensible hierarchies of exceptions.

There are two new valid (semantic) forms for the raise statement:

     raise Class, instance
     
     raise instance

In the first form, `instance' must be an instance of `Class' or of a
class derived from it.  The second form is a shorthand for:

     raise instance.__class__, instance

An except clause may list classes as well as string objects.  A class
in an except clause is compatible with an exception if it is the same
class or a base class thereof (but not the other way around -- an
except clause listing a derived class is not compatible with a base
class).  For example, the following code will print B, C, D in that
order:

     class B:
         pass
     class C(B):
         pass
     class D(C):
         pass
     
     for c in [B, C, D]:
         try:
             raise c()
         except D:
             print "D"
         except C:
             print "C"
         except B:
             print "B"

Note that if the except clauses were reversed (with `except B' first),
it would have printed B, B, B -- the first matching except clause is
triggered.

When an error message is printed for an unhandled exception which is a
class, the class name is printed, then a colon and a space, and finally
the instance converted to a string using the built-in function `str()'.


automatically generated by info2www version 1.2.2.9