Author: Timo Paulssen <timona...@perpetuum-immobile.de> Branch: numpypy-issue1137 Changeset: r54896:7ab172b5fbf2 Date: 2012-05-05 15:30 +0200 http://bitbucket.org/pypy/pypy/changeset/7ab172b5fbf2/
Log: pep8, swallow exceptions in __int__ and __index__ like numpy and better error when the index doesn't supply a working __len__, either. diff --git a/pypy/module/micronumpy/interp_numarray.py b/pypy/module/micronumpy/interp_numarray.py --- a/pypy/module/micronumpy/interp_numarray.py +++ b/pypy/module/micronumpy/interp_numarray.py @@ -354,19 +354,27 @@ try: value = space.int_w(space.index(w_idx)) return True - except: pass + except OperationError: + pass try: value = space.int_w(w_idx) return True - except: pass + except OperationError: + pass if space.isinstance_w(w_idx, space.w_slice): return False elif (space.isinstance_w(w_idx, space.w_slice) or space.isinstance_w(w_idx, space.w_int)): return False - lgt = space.len_w(w_idx) + + try: + lgt = space.len_w(w_idx) + except OperationError: + raise OperationError(space.w_IndexError, + space.wrap("index must be either an int or a sequence.")) + if lgt > shape_len: raise OperationError(space.w_IndexError, space.wrap("invalid index")) @@ -1045,13 +1053,15 @@ try: idx = space.int_w(space.index(w_idx)) is_valid = True - except: pass + except OperationError: + pass if not is_valid: try: idx = space.int_w(w_idx) is_valid = True - except: pass + except OperationError: + pass if is_valid: if idx < 0: diff --git a/pypy/module/micronumpy/test/test_numarray.py b/pypy/module/micronumpy/test/test_numarray.py --- a/pypy/module/micronumpy/test/test_numarray.py +++ b/pypy/module/micronumpy/test/test_numarray.py @@ -424,6 +424,23 @@ assert a[1] == 100 + def test_access_swallow_exception(self): + class ErrorIndex(object): + def __index__(self): + return 1 / 0 + + class ErrorInt(object): + def __int__(self): + return 1 / 0 + + # numpy will swallow errors in __int__ and __index__ and + # just raise IndexError. + + from _numpypy import arange + a = arange(10) + raises(IndexError, "a[ErrorIndex()] == 0") + raises(IndexError, "a[ErrorInt()] == 0") + def test_setslice_array(self): from _numpypy import array a = array(range(5)) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit