- publishing free software manuals
An Introduction to Python
by Guido van Rossum and Fred L. Drake, Jr.
Paperback (6"x9"), 124 pages
ISBN 0954161769
RRP £12.95 ($19.95)

Sales of this book support the Python Software Foundation! Get a printed copy>>>

9.8 Exceptions Are Classes Too

User-defined exceptions are identified by classes as well. Using this mechanism it is possible to create extensible hierarchies of exceptions.

There are two 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

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, the exception's class name is printed, then a colon and a space, and finally the instance converted to a string using the built-in function str().

ISBN 0954161769An Introduction to PythonSee the print edition