"reraise" & Exception Transformation (was Re: Modules implicitly exposing exceptions from other modules)
Skip Montanaro
skip at mojam.com
Wed Feb 16 10:19:13 EST 2000
Randall> SIDE POINT:
Randall> Sadly in Python, with this syntax we loose track of the stack
Randall> frames between the original exception and this exception
Randall> transformation (which would be useful to have if the client
Randall> doesn't handle the error and we print a traceback). But AFAICT
Randall> this is a feature (or deficiency) of the language.
Watch out for Guido's time machine (again!). The raise statement takes
three (all optional) objects. If you catch the original exception's context
inside the except block using sys.exc_info() you can pass the traceback
object as the third argument to raise, e.g.:
try:
whole_buncha_hooey()
except socket.error:
type, val, tb = sys.exc_info()
raise NNTPError, NNTPError((val, my_interesting_local_state()), tb
When the NNTPerror exception is caught by the client it will see the stack
as it existed within the call to whole_buncha_hooey().
I think I have the syntax of the raise statement correct. The reference
manual isn't as clear as it might be on this. I'm sure someone will point
out any errors.
Skip Montanaro | http://www.mojam.com/
skip at mojam.com | http://www.musi-cal.com/
"Languages that change by catering to the tastes of non-users tend not to do
so well." - Doug Landauer
More information about the Python-list
mailing list