Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Grammar/python.gram
Original file line number Diff line number Diff line change
Expand Up @@ -1305,7 +1305,7 @@ invalid_dict_comprehension:
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "dict unpacking cannot be used in dict comprehension") }
invalid_parameters:
| a="/" ',' {
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "at least one argument must precede /") }
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "at least one parameter must precede /") }
| (slash_no_default | slash_with_default) param_maybe_default* a='/' {
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "/ may appear only once") }
| slash_no_default? param_no_default* invalid_parameters_helper a=param_no_default {
Expand Down Expand Up @@ -1333,7 +1333,7 @@ invalid_parameters_helper: # This is only there to avoid type errors
| param_with_default+
invalid_lambda_parameters:
| a="/" ',' {
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "at least one argument must precede /") }
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "at least one parameter must precede /") }
| (lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* a='/' {
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "/ may appear only once") }
| lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper a=lambda_param_no_default {
Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_codeop.py
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ def test_syntax_errors(self):
dedent("""\
def foo(x,x):
pass
"""), "duplicate argument 'x' in function definition")
"""), "duplicate parameter 'x' in function definition")



Expand Down
12 changes: 6 additions & 6 deletions Lib/test/test_positional_only_arg.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ def test_invalid_syntax_errors(self):
check_syntax_error(self, "def f(/): pass")
check_syntax_error(self, "def f(*, a, /): pass")
check_syntax_error(self, "def f(*, /, a): pass")
check_syntax_error(self, "def f(a, /, a): pass", "duplicate argument 'a' in function definition")
check_syntax_error(self, "def f(a, /, *, a): pass", "duplicate argument 'a' in function definition")
check_syntax_error(self, "def f(a, /, a): pass", "duplicate parameter 'a' in function definition")
check_syntax_error(self, "def f(a, /, *, a): pass", "duplicate parameter 'a' in function definition")
check_syntax_error(self, "def f(a, b/2, c): pass")
check_syntax_error(self, "def f(a, /, c, /): pass")
check_syntax_error(self, "def f(a, /, c, /, d): pass")
Expand All @@ -59,8 +59,8 @@ def test_invalid_syntax_errors_async(self):
check_syntax_error(self, "async def f(/): pass")
check_syntax_error(self, "async def f(*, a, /): pass")
check_syntax_error(self, "async def f(*, /, a): pass")
check_syntax_error(self, "async def f(a, /, a): pass", "duplicate argument 'a' in function definition")
check_syntax_error(self, "async def f(a, /, *, a): pass", "duplicate argument 'a' in function definition")
check_syntax_error(self, "async def f(a, /, a): pass", "duplicate parameter 'a' in function definition")
check_syntax_error(self, "async def f(a, /, *, a): pass", "duplicate parameter 'a' in function definition")
check_syntax_error(self, "async def f(a, b/2, c): pass")
check_syntax_error(self, "async def f(a, /, c, /): pass")
check_syntax_error(self, "async def f(a, /, c, /, d): pass")
Expand Down Expand Up @@ -247,8 +247,8 @@ def test_invalid_syntax_lambda(self):
check_syntax_error(self, "lambda /: None")
check_syntax_error(self, "lambda *, a, /: None")
check_syntax_error(self, "lambda *, /, a: None")
check_syntax_error(self, "lambda a, /, a: None", "duplicate argument 'a' in function definition")
check_syntax_error(self, "lambda a, /, *, a: None", "duplicate argument 'a' in function definition")
check_syntax_error(self, "lambda a, /, a: None", "duplicate parameter 'a' in function definition")
check_syntax_error(self, "lambda a, /, *, a: None", "duplicate parameter 'a' in function definition")
check_syntax_error(self, "lambda a, /, b, /: None")
check_syntax_error(self, "lambda a, /, b, /, c: None")
check_syntax_error(self, "lambda a, /, b, /, c, *, d: None")
Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_pyrepl/test_interact.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ def test_runsource_show_syntax_error_location(self):
r = """
def f(x, x): ...
^
SyntaxError: duplicate argument 'x' in function definition"""
SyntaxError: duplicate parameter 'x' in function definition"""
self.assertIn(r, f.getvalue())

def test_runsource_shows_syntax_error_for_failed_compilation(self):
Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_repl.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ def test_runsource_show_syntax_error_location(self):
expected_lines = [
' def f(x, x): ...',
' ^',
"SyntaxError: duplicate argument 'x' in function definition"
"SyntaxError: duplicate parameter 'x' in function definition"
]
self.assertEqual(output.splitlines()[4:-1], expected_lines)

Expand Down
4 changes: 2 additions & 2 deletions Lib/test/test_syntax.py
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@
>>> def foo(/,a,b=,c):
... pass
Traceback (most recent call last):
SyntaxError: at least one argument must precede /
SyntaxError: at least one parameter must precede /

>>> def foo(a,/,/,b,c):
... pass
Expand Down Expand Up @@ -538,7 +538,7 @@

>>> lambda /,a,b,c: None
Traceback (most recent call last):
SyntaxError: at least one argument must precede /
SyntaxError: at least one parameter must precede /

>>> lambda a,/,/,b,c: None
Traceback (most recent call last):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Correct usage of *arguments* in error messages.
4 changes: 2 additions & 2 deletions Parser/parser.c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions Python/symtable.c
Original file line number Diff line number Diff line change
Expand Up @@ -380,8 +380,8 @@ static void dump_symtable(PySTEntryObject* ste)
}
#endif

#define DUPLICATE_ARGUMENT \
"duplicate argument '%U' in function definition"
#define DUPLICATE_PARAMETER \
"duplicate parameter '%U' in function definition"

static struct symtable *
symtable_new(void)
Expand Down Expand Up @@ -1494,7 +1494,7 @@ symtable_add_def_helper(struct symtable *st, PyObject *name, int flag, struct _s
}
if ((flag & DEF_PARAM) && (val & DEF_PARAM)) {
/* Is it better to use 'mangled' or 'name' here? */
PyErr_Format(PyExc_SyntaxError, DUPLICATE_ARGUMENT, name);
PyErr_Format(PyExc_SyntaxError, DUPLICATE_PARAMETER, name);
SET_ERROR_LOCATION(st->st_filename, loc);
goto error;
}
Expand Down
Loading