Author: Brian Kearns <bdkea...@gmail.com> Branch: Changeset: r69271:4a4a4fae4a49 Date: 2014-02-22 12:52 -0500 http://bitbucket.org/pypy/pypy/changeset/4a4a4fae4a49/
Log: improve dtype creation error messages diff --git a/pypy/module/micronumpy/interp_dtype.py b/pypy/module/micronumpy/interp_dtype.py --- a/pypy/module/micronumpy/interp_dtype.py +++ b/pypy/module/micronumpy/interp_dtype.py @@ -429,8 +429,7 @@ pass if name[0] in 'VSUc' or name[0] in '<>=|' and name[1] in 'VSUc': return variable_dtype(space, name) - raise OperationError(space.w_TypeError, space.wrap( - "data type %s not understood" % name)) + raise oefmt(space.w_TypeError, 'data type "%s" not understood', name) elif space.isinstance_w(w_dtype, space.w_list): return dtype_from_list(space, w_dtype) elif space.isinstance_w(w_dtype, space.w_tuple): @@ -449,9 +448,9 @@ return dtype if w_dtype is dtype.w_box_type: return dtype - raise oefmt(space.w_TypeError, - "data type not understood (value of type %T not expected " - "here)", w_dtype) + if space.isinstance_w(w_dtype, space.w_type): + raise oefmt(space.w_NotImplementedError, "object dtype not implemented") + raise oefmt(space.w_TypeError, "data type not understood") W_Dtype.typedef = TypeDef("dtype", __module__ = "numpy", diff --git a/pypy/module/micronumpy/test/test_dtypes.py b/pypy/module/micronumpy/test/test_dtypes.py --- a/pypy/module/micronumpy/test/test_dtypes.py +++ b/pypy/module/micronumpy/test/test_dtypes.py @@ -68,7 +68,11 @@ assert exc.value.message == "There are no fields in dtype int8." exc = raises(TypeError, dtype, (1, 2)) - assert 'data type not understood' in str(exc.value) + assert exc.value[0] == 'data type not understood' + exc = raises(TypeError, dtype, lambda: 42) + assert exc.value[0] == 'data type not understood' + exc = raises(TypeError, dtype, 'oooo') + assert exc.value[0] == 'data type "oooo" not understood' raises(KeyError, 'dtype(int)["asdasd"]') def test_dtype_from_tuple(self): @@ -365,6 +369,18 @@ s2 = np.array(123, dtype=dt2).byteswap().tostring() assert s1 == s2 + def test_object(self): + import numpy as np + import sys + class O(object): + pass + for o in [object, O]: + if '__pypy__' not in sys.builtin_module_names: + assert np.dtype(o).str == '|O8' + else: + exc = raises(NotImplementedError, "np.dtype(o)") + assert exc.value[0] == 'object dtype not implemented' + class AppTestTypes(BaseAppTestDtypes): def test_abstract_types(self): import numpypy as numpy _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit