Bryan wrote: > i would like to save an exception and reraise it at a later time. > > something similar to this: > > exception = None > def foo(): > try: > 1/0 > except Exception, e: > exception = e > > if exception: raise exception > > with the above code, i'm able to successfully raise the exception, but the > line number of the exception is at the place of the explicit raise instead > of the where the exception originally occurred. is there anyway to fix > this?
Sure: generate the stack trace when the real exception occurs. Check out sys.exc_info() and the traceback module. import sys import traceback exception = None def foo(): global exception try: 1/0 except Exception: # Build a new exception of the same type with the inner stack trace exctype = sys.exc_info()[0] exception = exctype('\nInner ' + traceback.format_exc().strip()) foo() if exception: raise exception # Output: Traceback (most recent call last): File "foo.py", line 15, in <module> raise exception ZeroDivisionError: Inner Traceback (most recent call last): File "foo.py", line 8, in foo 1/0 ZeroDivisionError: integer division or modulo by zero --Ben -- http://mail.python.org/mailman/listinfo/python-list