diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 9d3ff02c55c..dc7a16d1e26 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -309,6 +309,9 @@ class SyntaxTestCase(unittest.TestCase): "unindent does not match .* level", subclass=IndentationError) + def test_kwargs_last(self): + self._check_error("int(base=10, '2')", "non-keyword arg") + def test_main(): test_support.run_unittest(SyntaxTestCase) from test import test_syntax diff --git a/Python/ast.c b/Python/ast.c index fafa25310b9..96645900552 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -1750,6 +1750,11 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func) if (TYPE(ch) == argument) { expr_ty e; if (NCH(ch) == 1) { + if (nkeywords) { + ast_error(CHILD(ch, 0), + "non-keyword arg after keyword arg"); + return NULL; + } e = ast_for_expr(c, CHILD(ch, 0)); if (!e) return NULL;