Commit 5839f946 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #27343: Fixed error message for conflicting initializers of ctypes.Structure.

parent 22000ad4
...@@ -227,10 +227,10 @@ class StructureTestCase(unittest.TestCase): ...@@ -227,10 +227,10 @@ class StructureTestCase(unittest.TestCase):
def test_conflicting_initializers(self): def test_conflicting_initializers(self):
class POINT(Structure): class POINT(Structure):
_fields_ = [("x", c_int), ("y", c_int)] _fields_ = [("phi", c_float), ("rho", c_float)]
# conflicting positional and keyword args # conflicting positional and keyword args
self.assertRaises(TypeError, POINT, 2, 3, x=4) self.assertRaisesRegex(TypeError, "phi", POINT, 2, 3, phi=4)
self.assertRaises(TypeError, POINT, 2, 3, y=4) self.assertRaisesRegex(TypeError, "rho", POINT, 2, 3, rho=4)
# too many initializers # too many initializers
self.assertRaises(TypeError, POINT, 2, 3, 4) self.assertRaises(TypeError, POINT, 2, 3, 4)
......
...@@ -4065,14 +4065,9 @@ _init_pos_args(PyObject *self, PyTypeObject *type, ...@@ -4065,14 +4065,9 @@ _init_pos_args(PyObject *self, PyTypeObject *type,
} }
val = PyTuple_GET_ITEM(args, i + index); val = PyTuple_GET_ITEM(args, i + index);
if (kwds && PyDict_GetItem(kwds, name)) { if (kwds && PyDict_GetItem(kwds, name)) {
char *field = PyBytes_AsString(name);
if (field == NULL) {
PyErr_Clear();
field = "???";
}
PyErr_Format(PyExc_TypeError, PyErr_Format(PyExc_TypeError,
"duplicate values for field '%s'", "duplicate values for field %R",
field); name);
Py_DECREF(pair); Py_DECREF(pair);
Py_DECREF(name); Py_DECREF(name);
return -1; return -1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment