Adding to Exception.args

Scott David Daniels Scott.Daniels at Acm.Org
Mon Jun 13 21:24:38 CEST 2005


Andreas Beyer wrote:
> I came up with the following code:
>    inp = file(file_name)
>    for n, line in enumerate(inp):
>        try:
>            # parse line ...
>        except Exception, e:
>            inp.close() # Is this necessary for 'r' files?
>            args = list(e.args)
>            args.insert(0, 'line: %d'%(n+1))
>            e.args = tuple(args)
>            raise
     inp = open(file_name)       # GvR prefers this style, not file
     try:
         for n, line in enumerate(inp):
             try:
                 # parse line ...
             except Exception, e:
                 e.args = e.args + ('line: %d' % (n + 1),) # tuple add
                 raise
     finally:
         inp.close() # it is certainly more portable, and more readable


> Is there any specific order to the arguments in e.args? 
 > Should my 'user argument' be at the beginning or at the end of e.args?

If you are going to play with it, it is more likely that indices
are used (so making e.args[0] refer to the same thing may help).
The __str__ method of the Exception is responsible for formatting.
If you "wrap" an exception that has its own __str__ method, it
may well expect the args tuple to hold a precise number of
elements (and therefore fail to convert to a string).

--Scott David Daniels
Scott.Daniels at Acm.Org



More information about the Python-list mailing list