En Fri, 06 Mar 2009 04:29:16 -0200, Steven D'Aprano <st...@pearwood.info>
escribió:
I wish to catch an exception, modify the error message, and re-raise it.
There are two ways I know of to do this, with subtly different effects:
def raise_example1():
... try:
... None()
... except TypeError, e:
... e.args = ('modified error message',) + e.args[1:]
... raise e
...
def raise_example2():
... try:
... None()
... except TypeError, e:
... e.args = ('modified error message',) + e.args[1:]
... raise
The behaviour I want is from raise_example2, but I'm not sure if this is
documented behaviour, or if it is something I can rely on. Is it
acceptable
to modify an exception before re-raising it?
I don't completely understand your question. Is it about the bare raise?
It is documented here:
http://docs.python.org/reference/simple_stmts.html#the-raise-statement
"If no expressions are present, raise re-raises the last exception that
was active in the current scope. [...] The three-expression form of raise
is useful to re-raise an exception transparently in an except clause, but
raise with no expressions should be preferred if the exception to be
re-raised was the most recently active exception in the current scope."
Or are you worried about modifying e.args? Hmm, it isn't explicitely
forbidden, so I assume it's allowed... I've done it a few times -usually
to provide more context to error messages- without bad consequences AFAICT.
--
Gabriel Genellina
--
http://mail.python.org/mailman/listinfo/python-list