saving an exception

B

Bryan

hi,

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


i have a need to do this because in my example foo is a callback from c code
which was originally called from python and i can't modify the c code.
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?


thanks,

bryan
 
B

Ben Cartwright

Bryan said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,792
Messages
2,569,639
Members
45,351
Latest member
RoxiePulli

Latest Threads

Top