[pypy-commit] pypy default: improve dtype creation error messages

bdkearns noreply at buildbot.pypy.org
Sat Feb 22 19:54:07 CET 2014


Author: Brian Kearns <bdkearns at 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


More information about the pypy-commit mailing list