Deeper tracebacks?

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Wed Dec 10 17:03:22 EST 2008


En Wed, 10 Dec 2008 16:59:16 -0200, brooklineTom <BrooklineTom at gmail.com>  
escribió:

> I want my exception handler to report the method that originally
> raised an exception, at the deepest level in the call-tree. Let give
> an example.

That's the default behavior, you don't have to do anything special.

> import sys, traceback
> class SomeClass:
>     def error(self):
>         """Raises an AttributeError exception."""
>         int(3).zork()
>
>     def perform_(self, aSelector):
>         try:
>             aMethod = getattr(self, aSelector, None)
>             answer = apply(aMethod, [], {})
>         except: AttributeError, anAttributeErrorException:
>             aRawStack = traceback.extract_stack()
>             answer = None

(I assume you're using Python < 3.0)
Use the 3-names form of the except statement:

         try:
             aMethod = getattr(self, aSelector, None)
             answer = aMethod()
         except AttributeError, e, tb:
             # the tb variable holds the traceback up to the error
             # the same thing you see printed by Python when
             # an unhandled error happens
             answer = None


Alternatively, you can obtain the same thing with sys.exc_info()[2]
Remember to delete any reference to the traceback object as soon as you're  
done with it; see http://docs.python.org/library/sys.html#sys.exc_info

-- 
Gabriel Genellina




More information about the Python-list mailing list