diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-06-18 06:58:24 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-06-18 06:58:24 (GMT) |
commit | 886a5f352fd64bcdc814dad292bbb37739a1cdd9 (patch) | |
tree | 54492f7a1066712a3ec190204170b80a11e9d083 | |
parent | 08bb8a41cc976343795bd0e241cd7388e9f44ad5 (diff) | |
download | cpython-886a5f352fd64bcdc814dad292bbb37739a1cdd9.zip cpython-886a5f352fd64bcdc814dad292bbb37739a1cdd9.tar.gz cpython-886a5f352fd64bcdc814dad292bbb37739a1cdd9.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 84d456c..d998c27 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 311fb5d..a7a8105 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; |