On Fri, Sep 25, 2009 at 1:00 PM, Skipper Seabold <jsseabold@gmail.com> wrote:
There have been some recent attempts to improve the error reporting in
genfromtxt <http://projects.scipy.org/numpy/ticket/1212>, which is
great, because hunting down the problems reading in big and messy
files is not fun.

I am working on a patch that keeps up with the line number and column
number of where you are in parsing the file, so that this can be
reported in the error.  Is there a way to catch a raised error and add
to it?

For instance, I have a problem in my file which leads to this error
being raised from np.lib._iotools.StringCoverter.upgrade

ValueError: Converter is locked and cannot be upgraded

I added this into np.lib.io.genfromtxt around line 995.

linenum = 0
[...]
if dtype is None:
           try:
               colnum = 0
               for (converter, item) in zip(converters, values):
                   converter.upgrade(item)
                   colnum += 1
           except:
               raise ValueError, "I don't report the error from
_iotools.StringConverter.upgrade, but I do know that there is a
problem trying to convert a value at line %s and column %s" %
(linenum,colnum)
[...]
linenum += 1

I'd like to add line and column number information to original error
from _iotools.  Any suggestions?

There is no good way to edit the message of the original exception instance, as explained here: http://blog.ianbicking.org/2007/09/12/re-raising-exceptions/

Probably the easiest for your purpose is this:

def divbyzero():
    return 1/0

try:
    a = divbyzero()
except ZeroDivisionError as err:
    print 'problem occurred at line X'
    raise err

or if you want to catch any error:

try:
    yourcode()
except:
    print 'problem occurred at line X'
    raise


Maybe better to use a logger instead of print, but you get the idea.

Cheers,
Ralf



Cheers,
Skipper
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion