On Mon, Jun 4, 2012 at 4:27 PM, Thouis (Ray) Jones <tho...@gmail.com> wrote: > On Fri, Jun 1, 2012 at 6:56 PM, Chris Withers <ch...@simplistix.co.uk> wrote: >> On 01/06/2012 16:39, Benjamin Root wrote: >>> >>> >>> > >>> import numpy >>> > >>> numpy.zeros(10)[-123] >>> > Traceback (most recent call last): >>> > File "<stdin>", line 1, in <module> >>> > IndexError: index out of bounds >>> > >>> > ...could say this: >>> > >>> > >>> numpy.zeros(10)[-123] >>> > Traceback (most recent call last): >>> > File "<stdin>", line 1, in <module> >>> > IndexError: -123 is out of bounds >>> >>> Only that no-one has implemented it, I guess. If you want to then >>> that'd be cool :-). >>> >>> To be generally useful for debugging, it would probably be good for >>> the error message to also mention which dimension is involved, and/or >>> the actual size of the array in that dimension. You can also get such >>> error messages from expressions like 'arr[i, j, k]', after all, where >>> it's even less obvious what went wrong. >>> >>> -- Nathaniel >>> >>> >>> +1, please! >> >> Indeed, sadly I'm not a C developer. It's a pet bugbear of mine that >> Python's built-in exceptions often tell you what went wrong but not what >> data caused the error, even when it's easily to hand when raising the >> exception. > > I could look into this. There are only ~10 places the code generates > this error, so it should be a pretty minor change.
My initial estimate was low, but not overly so. An initial pass at adding index/dimension information to IndexErrors is here: https://github.com/thouis/numpy/tree/index_error_info A typical result: >>> numpy.zeros(3)[5] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: index 5 out of bounds in dimension 0 I thought it best to have erroring indices report their initial value: >>> numpy.zeros(3)[-15] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: index -15 out of bounds in dimension 0 This is different from some places in the code where IndexErrors already had bad index and dimension information (including the maximum value possible for an index in that dimension). I left these alone, though most of them would report that the bad index was -12 instead of -15. For instance: https://github.com/thouis/numpy/blob/index_error_info/numpy/core/src/multiarray/mapping.c#L1640 Also there were a few indexing errors that were throwing ValueErrors. I changed these to IndexErrors. If someone could give this a cursory review before I issue a PR, I'd appreciate it. I don't expect that most of these code paths are heavily exercised in the tests (but I could be wrong). Ray Jones _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion