summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--numpy/core/src/multiarray/descriptor.c12
-rw-r--r--numpy/core/tests/test_dtype.py2
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)})