saving an exception
Ben Cartwright
bencvt at gmail.com
Tue Oct 3 02:18:42 EDT 2006
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
More information about the Python-list
mailing list