_testcapi = None
import struct
import collections
+import itertools
# The test cases here cover several paths through the function calling
# code. They depend on the METH_XXX flag that is used to define a C
msg = r"^classmethod\(\) takes no keyword arguments$"
self.assertRaisesRegex(TypeError, msg, classmethod, func=id)
+ def test_varargs14_kw(self):
+ msg = r"^product\(\) takes at most 1 keyword argument \(2 given\)$"
+ self.assertRaisesRegex(TypeError, msg,
+ itertools.product, 0, repeat=1, foo=2)
+
+ def test_varargs15_kw(self):
+ msg = r"^ImportError\(\) takes at most 2 keyword arguments \(3 given\)$"
+ self.assertRaisesRegex(TypeError, msg,
+ ImportError, 0, name=1, path=2, foo=3)
+
+ def test_varargs16_kw(self):
+ msg = r"^min\(\) takes at most 2 keyword arguments \(3 given\)$"
+ self.assertRaisesRegex(TypeError, msg,
+ min, 0, default=1, key=2, foo=3)
+
+ def test_varargs17_kw(self):
+ msg = r"^print\(\) takes at most 4 keyword arguments \(5 given\)$"
+ self.assertRaisesRegex(TypeError, msg,
+ print, 0, sep=1, end=2, file=3, flush=4, foo=5)
+
def test_oldargs0_1(self):
msg = r"keys\(\) takes no arguments \(1 given\)"
self.assertRaisesRegex(TypeError, msg, {}.keys, 0)
nargs = PyTuple_GET_SIZE(args);
nkwargs = (kwargs == NULL) ? 0 : PyDict_GET_SIZE(kwargs);
if (nargs + nkwargs > len) {
+ /* Adding "keyword" (when nargs == 0) prevents producing wrong error
+ messages in some special cases (see bpo-31229). */
PyErr_Format(PyExc_TypeError,
- "%.200s%s takes at most %d argument%s (%zd given)",
+ "%.200s%s takes at most %d %sargument%s (%zd given)",
(fname == NULL) ? "function" : fname,
(fname == NULL) ? "" : "()",
len,
+ (nargs == 0) ? "keyword " : "",
(len == 1) ? "" : "s",
nargs + nkwargs);
return cleanreturn(0, &freelist);
nkwargs = 0;
}
if (nargs + nkwargs > len) {
+ /* Adding "keyword" (when nargs == 0) prevents producing wrong error
+ messages in some special cases (see bpo-31229). */
PyErr_Format(PyExc_TypeError,
- "%.200s%s takes at most %d argument%s (%zd given)",
+ "%.200s%s takes at most %d %sargument%s (%zd given)",
(parser->fname == NULL) ? "function" : parser->fname,
(parser->fname == NULL) ? "" : "()",
len,
+ (nargs == 0) ? "keyword " : "",
(len == 1) ? "" : "s",
nargs + nkwargs);
return cleanreturn(0, &freelist);