mirror of
https://github.com/python/cpython.git
synced 2025-07-29 14:15:07 +00:00
improve error message from passing inadequate number of keyword arguments #6474
Note this removes the "non-keyword" or "keyword" phrases from these messages.
This commit is contained in:
parent
54bc22e9f3
commit
965458931f
3 changed files with 19 additions and 5 deletions
|
@ -270,6 +270,15 @@ the function call setup. See <http://bugs.python.org/issue2016>.
|
|||
... print a,b
|
||||
>>> f(**x)
|
||||
1 2
|
||||
|
||||
A obscure message:
|
||||
|
||||
>>> def f(a, b):
|
||||
... pass
|
||||
>>> f(b=1)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
TypeError: f() takes exactly 2 arguments (1 given)
|
||||
"""
|
||||
|
||||
import unittest
|
||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 2.7 beta 1?
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #6474: Make error message from passing an inadequate number of keyword
|
||||
arguments to a function correct.
|
||||
|
||||
- Issue #8164: Don't allow lambda functions to have a docstring.
|
||||
|
||||
- Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt
|
||||
|
|
|
@ -3055,11 +3055,10 @@ PyEval_EvalCodeEx(PyCodeObject *co, PyObject *globals, PyObject *locals,
|
|||
if (!(co->co_flags & CO_VARARGS)) {
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
"%.200s() takes %s %d "
|
||||
"%sargument%s (%d given)",
|
||||
"argument%s (%d given)",
|
||||
PyString_AsString(co->co_name),
|
||||
defcount ? "at most" : "exactly",
|
||||
co->co_argcount,
|
||||
kwcount ? "non-keyword " : "",
|
||||
co->co_argcount == 1 ? "" : "s",
|
||||
argcount);
|
||||
goto fail;
|
||||
|
@ -3150,15 +3149,18 @@ PyEval_EvalCodeEx(PyCodeObject *co, PyObject *globals, PyObject *locals,
|
|||
int m = co->co_argcount - defcount;
|
||||
for (i = argcount; i < m; i++) {
|
||||
if (GETLOCAL(i) == NULL) {
|
||||
int j, given = 0;
|
||||
for (j = 0; j < co->co_argcount; j++)
|
||||
if (GETLOCAL(j))
|
||||
given++;
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
"%.200s() takes %s %d "
|
||||
"%sargument%s (%d given)",
|
||||
"argument%s (%d given)",
|
||||
PyString_AsString(co->co_name),
|
||||
((co->co_flags & CO_VARARGS) ||
|
||||
defcount) ? "at least"
|
||||
: "exactly",
|
||||
m, kwcount ? "non-keyword " : "",
|
||||
m == 1 ? "" : "s", i);
|
||||
m, m == 1 ? "" : "s", given);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue