Re-raising exceptions with modified message

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Mon Jul 16 19:14:25 CEST 2007


En Mon, 16 Jul 2007 13:50:50 -0300, fumanchu <fumanchu at amor.org> escribió:

> On Jul 15, 2:55 am, Christoph Zwerschke <c... at online.de> wrote:
>> Here is a simple solution, but it depends
>> on the existence of the args attribute that
>> "will eventually be deprecated" according
>> to the docs
>
> If you don't mind using .args, then the solution is usually as simple
> as:
>
>
> try:
>     Thing.do(arg1, arg2)
> except Exception, e:
>     e.args += (Thing.state, arg1, arg2)
>     raise
>
>
> No over-engineering needed. ;)

If you read enough of this long thread, you'll see that the original  
requirement was to enhance the *message* displayed by a normal traceback -  
the OP has no control over the callers, but wants to add useful  
information to any exception.
Your code does not qualify:

py> try:
...   open("a file that does not exist")
... except Exception,e:
...   e.args += ("Sorry",)
...   raise
...
Traceback (most recent call last):
   File "<stdin>", line 2, in <module>
IOError: [Errno 2] No such file or directory: 'a file that does not exist'
py> try:
...   x = u"á".encode("ascii")
... except Exception,e:
...   e.args += ("Sorry",)
...   raise
...
Traceback (most recent call last):
   File "<stdin>", line 2, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in  
position 0:
ordinal not in range(128)

-- 
Gabriel Genellina




More information about the Python-list mailing list