From 33c0c90dea06fda1df99482521559ebef7210bea Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Wed, 19 May 2021 19:03:04 +0100 Subject: bpo-44168: Fix error message in the parser for keyword arguments for invalid expressions (GH-26210) --- Lib/test/test_syntax.py | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) (limited to 'Lib/test/test_syntax.py') diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 58407212b49..3b1128e9af3 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -458,28 +458,33 @@ SyntaxError: expected ':' ... 290, 291, 292, 293, 294, 295, 296, 297, 298, 299) # doctest: +ELLIPSIS (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..., 297, 298, 299) -# >>> f(lambda x: x[0] = 3) -# Traceback (most recent call last): -# SyntaxError: expression cannot contain assignment, perhaps you meant "=="? +>>> f(lambda x: x[0] = 3) +Traceback (most recent call last): +SyntaxError: expression cannot contain assignment, perhaps you meant "=="? + +# Check that this error doesn't trigger for names: +>>> f(a={x: for x in {}}) +Traceback (most recent call last): +SyntaxError: invalid syntax The grammar accepts any test (basically, any expression) in the keyword slot of a call site. Test a few different options. -# >>> f(x()=2) -# Traceback (most recent call last): -# SyntaxError: expression cannot contain assignment, perhaps you meant "=="? -# >>> f(a or b=1) -# Traceback (most recent call last): -# SyntaxError: expression cannot contain assignment, perhaps you meant "=="? -# >>> f(x.y=1) -# Traceback (most recent call last): -# SyntaxError: expression cannot contain assignment, perhaps you meant "=="? -# >>> f((x)=2) -# Traceback (most recent call last): -# SyntaxError: expression cannot contain assignment, perhaps you meant "=="? -# >>> f(True=2) -# Traceback (most recent call last): -# SyntaxError: cannot assign to True here. Maybe you meant '==' instead of '='? +>>> f(x()=2) +Traceback (most recent call last): +SyntaxError: expression cannot contain assignment, perhaps you meant "=="? +>>> f(a or b=1) +Traceback (most recent call last): +SyntaxError: expression cannot contain assignment, perhaps you meant "=="? +>>> f(x.y=1) +Traceback (most recent call last): +SyntaxError: expression cannot contain assignment, perhaps you meant "=="? +>>> f((x)=2) +Traceback (most recent call last): +SyntaxError: expression cannot contain assignment, perhaps you meant "=="? +>>> f(True=2) +Traceback (most recent call last): +SyntaxError: expression cannot contain assignment, perhaps you meant "=="? >>> f(__debug__=1) Traceback (most recent call last): SyntaxError: cannot assign to __debug__ @@ -1422,7 +1427,7 @@ def case(x): case(34) """ compile(code, "", "exec") - + def test_multiline_compiler_error_points_to_the_end(self): self._check_error( "call(\na=1,\na=1\n)", -- cgit v1.2.3