syntax_tests = """
->>> def f(): #doctest: +ELLIPSIS
+>>> def f():
... return 22
... yield 1
Traceback (most recent call last):
..
-SyntaxError: 'return' with argument inside generator (..., line 2)
+SyntaxError: 'return' with argument inside generator (<doctest test.test_generators.syntax[0]>, line 2)
->>> def f(): #doctest: +ELLIPSIS
+>>> def f():
... yield 1
... return 22
Traceback (most recent call last):
..
-SyntaxError: 'return' with argument inside generator (..., line 3)
+SyntaxError: 'return' with argument inside generator (<doctest test.test_generators.syntax[1]>, line 3)
"return None" is not the same as "return" in a generator:
->>> def f(): #doctest: +ELLIPSIS
+>>> def f():
... yield 1
... return None
Traceback (most recent call last):
..
-SyntaxError: 'return' with argument inside generator (..., line 3)
+SyntaxError: 'return' with argument inside generator (<doctest test.test_generators.syntax[2]>, line 3)
This one is fine:
... yield 1
... return
->>> def f(): #doctest: +ELLIPSIS
+>>> def f():
... try:
... yield 1
... finally:
... pass
Traceback (most recent call last):
..
-SyntaxError: 'yield' not allowed in a 'try' block with a 'finally' clause (..., line 3)
+SyntaxError: 'yield' not allowed in a 'try' block with a 'finally' clause (<doctest test.test_generators.syntax[4]>, line 3)
->>> def f(): #doctest: +ELLIPSIS
+>>> def f():
... try:
... try:
... 1//0
... pass
Traceback (most recent call last):
...
-SyntaxError: 'yield' not allowed in a 'try' block with a 'finally' clause (..., line 6)
+SyntaxError: 'yield' not allowed in a 'try' block with a 'finally' clause (<doctest test.test_generators.syntax[5]>, line 6)
But this is fine:
<type 'generator'>
->>> def f(): #doctest: +ELLIPSIS
+>>> def f():
... if 0:
... lambda x: x # shouldn't trigger here
... return # or here
... if 0:
... yield 2 # because it's a generator
Traceback (most recent call last):
-SyntaxError: 'return' with argument inside generator (..., line 8)
+SyntaxError: 'return' with argument inside generator (<doctest test.test_generators.syntax[22]>, line 8)
This one caused a crash (see SF bug 567538):