summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2008-01-16 19:45:51 (GMT)
committerThomas Heller <theller@ctypes.org>2008-01-16 19:45:51 (GMT)
commit415c1e36a9f3cb119fad8aa5fcdcc9f31284782e (patch)
tree39db49aa09e4dc2cff313097c656af4414320143
parent02ec289f3e16ee6b00ecf7ec8f8e0f2a3e1ad152 (diff)
downloadcpython-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.py8
-rw-r--r--Misc/NEWS2
-rw-r--r--Modules/_ctypes/_ctypes.c2
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):
diff --git a/Misc/NEWS b/Misc/NEWS
index 29bd3dd..497889b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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;
}