mirror of
https://github.com/python/cpython.git
synced 2025-08-30 21:48:47 +00:00
bpo-40334: Correctly identify invalid target in assignment errors (GH-20076)
Co-authored-by: Lysandros Nikolaou <lisandrosnik@gmail.com>
This commit is contained in:
parent
7ba1f75f3f
commit
16ab07063c
10 changed files with 137 additions and 45 deletions
|
@ -100,30 +100,37 @@ expression inside that contain should still cause a syntax error.
|
|||
This test just checks a couple of cases rather than enumerating all of
|
||||
them.
|
||||
|
||||
# All of the following also produce different error messages with pegen
|
||||
# >>> (a, "b", c) = (1, 2, 3)
|
||||
# Traceback (most recent call last):
|
||||
# SyntaxError: cannot assign to literal
|
||||
>>> (a, "b", c) = (1, 2, 3)
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to literal
|
||||
|
||||
# >>> (a, True, c) = (1, 2, 3)
|
||||
# Traceback (most recent call last):
|
||||
# SyntaxError: cannot assign to True
|
||||
>>> (a, True, c) = (1, 2, 3)
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to True
|
||||
|
||||
>>> (a, __debug__, c) = (1, 2, 3)
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to __debug__
|
||||
|
||||
# >>> (a, *True, c) = (1, 2, 3)
|
||||
# Traceback (most recent call last):
|
||||
# SyntaxError: cannot assign to True
|
||||
>>> (a, *True, c) = (1, 2, 3)
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to True
|
||||
|
||||
>>> (a, *__debug__, c) = (1, 2, 3)
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to __debug__
|
||||
|
||||
# >>> [a, b, c + 1] = [1, 2, 3]
|
||||
# Traceback (most recent call last):
|
||||
# SyntaxError: cannot assign to operator
|
||||
>>> [a, b, c + 1] = [1, 2, 3]
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to operator
|
||||
|
||||
>>> [a, b[1], c + 1] = [1, 2, 3]
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to operator
|
||||
|
||||
>>> [a, b.c.d, c + 1] = [1, 2, 3]
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to operator
|
||||
|
||||
>>> a if 1 else b = 1
|
||||
Traceback (most recent call last):
|
||||
|
@ -131,15 +138,15 @@ SyntaxError: cannot assign to conditional expression
|
|||
|
||||
>>> a, b += 1, 2
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: invalid syntax
|
||||
SyntaxError: 'tuple' is an illegal expression for augmented assignment
|
||||
|
||||
>>> (a, b) += 1, 2
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to tuple
|
||||
SyntaxError: 'tuple' is an illegal expression for augmented assignment
|
||||
|
||||
>>> [a, b] += 1, 2
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to list
|
||||
SyntaxError: 'list' is an illegal expression for augmented assignment
|
||||
|
||||
From compiler_complex_args():
|
||||
|
||||
|
@ -346,16 +353,16 @@ More set_context():
|
|||
|
||||
>>> (x for x in x) += 1
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to generator expression
|
||||
SyntaxError: 'generator expression' is an illegal expression for augmented assignment
|
||||
>>> None += 1
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to None
|
||||
SyntaxError: 'None' is an illegal expression for augmented assignment
|
||||
>>> __debug__ += 1
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to __debug__
|
||||
>>> f() += 1
|
||||
Traceback (most recent call last):
|
||||
SyntaxError: cannot assign to function call
|
||||
SyntaxError: 'function call' is an illegal expression for augmented assignment
|
||||
|
||||
|
||||
Test continue in finally in weird combinations.
|
||||
|
@ -688,6 +695,7 @@ class SyntaxTestCase(unittest.TestCase):
|
|||
def test_assign_call(self):
|
||||
self._check_error("f() = 1", "assign")
|
||||
|
||||
@unittest.skipIf(support.use_old_parser(), "The old parser cannot generate these error messages")
|
||||
def test_assign_del(self):
|
||||
self._check_error("del (,)", "invalid syntax")
|
||||
self._check_error("del 1", "delete literal")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue