Peter Hansen wrote: > [EMAIL PROTECTED] 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 > This clears the fog a little. > > 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.
<classic keyboard fumbling> What I am trying to do is get information from a raised custom exception. I am catching the exception in a main() function but it was actually raised in a separate module function. It would be nice if I could print out where the exception was raised from (module.function name + line number). ------------------------- def some_module_function(): if something_bad: raise LinuxDriverError, "raising.." --------------------------- def main(): try: mymodule.some_module_function() except LinuxDriverError, error: print error.message print error.from_where Thanks, --Erick > > -Peter -- http://mail.python.org/mailman/listinfo/python-list