confusion around CustomException example in 'Python in a Nutshell'
Peter Hansen
peter at engcorp.com
Fri Mar 11 20:17:38 EST 2005
erick_bodine at comcast.net wrote:
> In Martinelli's Nutshell book in the Exceptions chapter there is an
> example of a custom exception class (pg.112) that I am trying to
> implement without success. The custom exception class example pulls
> sys.exc_info() into an attribute and I am assuming that the attribute
> would then contain the raised exception info in a tuple (admittedly I
> could be assuming erroneously).
>
> class LinuxDriverError(Exception):
> def __init__(self, *args):
> Exception.__init__(self, *args)
> self.message = args[0]
> self.wrapped_exc = sys.exc_info()
>
> try:
> raise LinuxDriverError, "raising Cain!"
> except CustomException, error:
> print error.message
> print error.wrapped_exc
>
> # just checking
> print "sys.exc_info(): ", sys.exc_info()
>
> If I run the above code I get the following output:
>
> Just raising Cain!
> wrapped_exc: (None, None, None)
> sys.exc_info(): (<class __main__.LinuxDriverError at 0xf6f774dc>,
> <__main__.LinuxDriverError instance at 0xf6f74bec>, <traceback object
> at 0xf6f7193c>)
>
> I do not understand why the wrapped_exc attribute contains no objects.
Because at the time you create the exception there is
no "current exception" as seen from the point of view
of sys.exc_info().
Given the way this class was written, it is clearly
intended to be raised from within an "except" statement
as a result of another exception having been caught.
Try this instead:
try:
try:
1/0
except:
raise LinuxDriverError, 'raising Cain!'
except Exception, ex:
print ex.wrapped_exc
By the way, the code you show is probably not what you
were actually running anyway... you caught a
"CustomException" but the LinuxDriverError is not
a subclass of that class so it wouldn't/shouldn't
have been caught.
-Peter
More information about the Python-list
mailing list