diff options
author | Thomas Heller <theller@ctypes.org> | 2008-01-16 19:45:51 (GMT) |
---|---|---|
committer | Thomas Heller <theller@ctypes.org> | 2008-01-16 19:45:51 (GMT) |
commit | 415c1e36a9f3cb119fad8aa5fcdcc9f31284782e (patch) | |
tree | 39db49aa09e4dc2cff313097c656af4414320143 | |
parent | 02ec289f3e16ee6b00ecf7ec8f8e0f2a3e1ad152 (diff) | |
download | cpython-415c1e36a9f3cb119fad8aa5fcdcc9f31284782e.zip cpython-415c1e36a9f3cb119fad8aa5fcdcc9f31284782e.tar.gz cpython-415c1e36a9f3cb119fad8aa5fcdcc9f31284782e.tar.bz2 |
Raise a TypeError instead of a ValueError when too many initializers
are used in a Structure or Union constructor.
-rw-r--r-- | Lib/ctypes/test/test_structures.py | 8 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Modules/_ctypes/_ctypes.c | 2 |
3 files changed, 7 insertions, 5 deletions
diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py index 3005e82..0c5a347 100644 --- a/Lib/ctypes/test/test_structures.py +++ b/Lib/ctypes/test/test_structures.py @@ -222,8 +222,8 @@ class StructureTestCase(unittest.TestCase): self.assertRaises(TypeError, POINT, 2, 3, x=4) self.assertRaises(TypeError, POINT, 2, 3, y=4) - # Should this raise TypeError instead? - self.assertRaises(ValueError, POINT, 2, 3, 4) + # too many initializers + self.assertRaises(TypeError, POINT, 2, 3, 4) def test_keyword_initializers(self): class POINT(Structure): @@ -320,9 +320,9 @@ class StructureTestCase(unittest.TestCase): self.failUnlessEqual(cls, RuntimeError) if issubclass(Exception, object): self.failUnlessEqual(msg, - "(Phone) <type 'exceptions.ValueError'>: too many initializers") + "(Phone) <type 'exceptions.TypeError'>: too many initializers") else: - self.failUnlessEqual(msg, "(Phone) exceptions.ValueError: too many initializers") + self.failUnlessEqual(msg, "(Phone) exceptions.TypeError: too many initializers") def get_except(self, func, *args): @@ -366,6 +366,8 @@ Library - Issue #1831: ctypes now raises a TypeError if conflicting positional and named arguments are passed to a Structure or Union initializer. + When too many positional arguments are passed, also a TypeError is + raised instead of a ValueError. - Convert the internal ctypes array type cache to a WeakValueDict so that array types do not live longer than needed. diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 8c66194..24d3c2f 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3557,7 +3557,7 @@ Struct_init(PyObject *self, PyObject *args, PyObject *kwds) if (PyTuple_GET_SIZE(args) > PySequence_Length(fields)) { Py_DECREF(fields); - PyErr_SetString(PyExc_ValueError, + PyErr_SetString(PyExc_TypeError, "too many initializers"); return -1; } |