diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-06-18 06:58:55 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-06-18 06:58:55 (GMT) |
commit | d91e676fd58a25420a3dc8705472dc6bf9ca46e2 (patch) | |
tree | 6b59a2b47e11a56fc46a26e1016d36832fb00e26 | |
parent | 5d062d7ba34068bed20e8b7486f9973bfafcd203 (diff) | |
parent | 886a5f352fd64bcdc814dad292bbb37739a1cdd9 (diff) | |
download | cpython-d91e676fd58a25420a3dc8705472dc6bf9ca46e2.zip cpython-d91e676fd58a25420a3dc8705472dc6bf9ca46e2.tar.gz cpython-d91e676fd58a25420a3dc8705472dc6bf9ca46e2.tar.bz2 |
Issue #27343: Fixed error message for conflicting initializers of ctypes.Structure.
-rw-r--r-- | Lib/ctypes/test/test_structures.py | 6 | ||||
-rw-r--r-- | Modules/_ctypes/_ctypes.c | 9 |
2 files changed, 5 insertions, 10 deletions
diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py index 736679f..94a86ea 100644 --- a/Lib/ctypes/test/test_structures.py +++ b/Lib/ctypes/test/test_structures.py @@ -227,10 +227,10 @@ class StructureTestCase(unittest.TestCase): def test_conflicting_initializers(self): class POINT(Structure): - _fields_ = [("x", c_int), ("y", c_int)] + _fields_ = [("phi", c_float), ("rho", c_float)] # conflicting positional and keyword args - self.assertRaises(TypeError, POINT, 2, 3, x=4) - self.assertRaises(TypeError, POINT, 2, 3, y=4) + self.assertRaisesRegex(TypeError, "phi", POINT, 2, 3, phi=4) + self.assertRaisesRegex(TypeError, "rho", POINT, 2, 3, rho=4) # too many initializers self.assertRaises(TypeError, POINT, 2, 3, 4) diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 44d1e56..331343b 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -4065,14 +4065,9 @@ _init_pos_args(PyObject *self, PyTypeObject *type, } val = PyTuple_GET_ITEM(args, i + index); if (kwds && PyDict_GetItem(kwds, name)) { - char *field = PyBytes_AsString(name); - if (field == NULL) { - PyErr_Clear(); - field = "???"; - } PyErr_Format(PyExc_TypeError, - "duplicate values for field '%s'", - field); + "duplicate values for field %R", + name); Py_DECREF(pair); Py_DECREF(name); return -1; |