| 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 0954161769 | An Introduction to Python | See the print edition |