diff options
author | Neal Norwitz <nnorwitz@gmail.com> | 2006-07-30 06:53:31 (GMT) |
---|---|---|
committer | Neal Norwitz <nnorwitz@gmail.com> | 2006-07-30 06:53:31 (GMT) |
commit | 0d62a062066a4cbc8aabab9c305d60ebf7922c8c (patch) | |
tree | 1232a8cb31283a4b4f2ae3a6840de9a57113eb51 /Lib | |
parent | 33c3e29fcec55d552eae9f684447d5f68ae019d7 (diff) | |
download | cpython-0d62a062066a4cbc8aabab9c305d60ebf7922c8c.zip cpython-0d62a062066a4cbc8aabab9c305d60ebf7922c8c.tar.gz cpython-0d62a062066a4cbc8aabab9c305d60ebf7922c8c.tar.bz2 |
Patch #1531113: Fix augmented assignment with yield expressions.
Also fix a SystemError when trying to assign to yield expressions.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_generators.py | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py index a184a8b..ee36413 100644 --- a/Lib/test/test_generators.py +++ b/Lib/test/test_generators.py @@ -1497,22 +1497,55 @@ And a more sane, but still weird usage: <type 'generator'> +A yield expression with augmented assignment. + +>>> def coroutine(seq): +... count = 0 +... while count < 200: +... count += yield +... seq.append(count) +>>> seq = [] +>>> c = coroutine(seq) +>>> c.next() +>>> print seq +[] +>>> c.send(10) +>>> print seq +[10] +>>> c.send(10) +>>> print seq +[10, 20] +>>> c.send(10) +>>> print seq +[10, 20, 30] + + Check some syntax errors for yield expressions: >>> f=lambda: (yield 1),(yield 2) Traceback (most recent call last): ... -SyntaxError: 'yield' outside function (<doctest test.test_generators.__test__.coroutine[10]>, line 1) +SyntaxError: 'yield' outside function (<doctest test.test_generators.__test__.coroutine[21]>, line 1) >>> def f(): return lambda x=(yield): 1 Traceback (most recent call last): ... -SyntaxError: 'return' with argument inside generator (<doctest test.test_generators.__test__.coroutine[11]>, line 1) +SyntaxError: 'return' with argument inside generator (<doctest test.test_generators.__test__.coroutine[22]>, line 1) >>> def f(): x = yield = y Traceback (most recent call last): ... -SyntaxError: assignment to yield expression not possible (<doctest test.test_generators.__test__.coroutine[12]>, line 1) +SyntaxError: assignment to yield expression not possible (<doctest test.test_generators.__test__.coroutine[23]>, line 1) + +>>> def f(): (yield bar) = y +Traceback (most recent call last): + ... +SyntaxError: can't assign to yield expression (<doctest test.test_generators.__test__.coroutine[24]>, line 1) + +>>> def f(): (yield bar) += y +Traceback (most recent call last): + ... +SyntaxError: augmented assignment to yield expression not possible (<doctest test.test_generators.__test__.coroutine[25]>, line 1) Now check some throw() conditions: |