diff options
-rw-r--r-- | numpy/core/src/multiarray/descriptor.c | 12 | ||||
-rw-r--r-- | numpy/core/tests/test_dtype.py | 2 |
2 files changed, 10 insertions, 4 deletions
diff --git a/numpy/core/src/multiarray/descriptor.c b/numpy/core/src/multiarray/descriptor.c index be4faa691..b6d33a74a 100644 --- a/numpy/core/src/multiarray/descriptor.c +++ b/numpy/core/src/multiarray/descriptor.c @@ -1008,12 +1008,18 @@ _convert_from_dict(PyObject *obj, int align) * Use PyMapping_GetItemString to support dictproxy objects as well. */ names = PyMapping_GetItemString(obj, "names"); + if (names == NULL) { + Py_DECREF(fields); + /* XXX should check this is a KeyError */ + PyErr_Clear(); + return _use_fields_dict(obj, align); + } descrs = PyMapping_GetItemString(obj, "formats"); - if (!names || !descrs) { + if (descrs == NULL) { Py_DECREF(fields); + /* XXX should check this is a KeyError */ PyErr_Clear(); - Py_XDECREF(names); - Py_XDECREF(descrs); + Py_DECREF(names); return _use_fields_dict(obj, align); } n = PyObject_Length(names); diff --git a/numpy/core/tests/test_dtype.py b/numpy/core/tests/test_dtype.py index 071aa1ab8..a38de0a46 100644 --- a/numpy/core/tests/test_dtype.py +++ b/numpy/core/tests/test_dtype.py @@ -321,7 +321,7 @@ class TestRecord(object): assert_equal(dt[1], dt[np.int8(1)]) def test_partial_dict(self): - # 'name' is missing + # 'names' is missing assert_raises(ValueError, np.dtype, {'formats': ['i4', 'i4'], 'f0': ('i4', 0), 'f1':('i4', 4)}) |