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

Reply via email to