Issue33555
Created on 2018-05-17 11:33 by FHTMitchell, last changed 2022-04-11 14:59 by admin. This issue is now closed.
| Messages (5) | |||
|---|---|---|---|
| msg316912 - (view) | Author: FHTMitchell (FHTMitchell) | Date: 2018-05-17 11:33 | |
In python 2.7 if you run the following code you get an error (as you would expect) Python 2.7.14 | packaged by conda-forge | (default, Dec 25 2017, 01:17:32) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> def f(): ... yield 1 ... return 2 ... File "<stdin>", line 3 SyntaxError: 'return' with argument inside generator However, in python 3.6 the error is silently ignored Python 3.6.4 | packaged by conda-forge | (default, Dec 24 2017, 10:11:43) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> def f(): ... yield 1 ... return 2 ... >>> for i in f(): ... print(i) ... 1 and still is in 3.7 Python 3.7.0b2 (v3.7.0b2:b0ef5c979b, Feb 28 2018, 02:24:20) [MSC v.1912 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> def f(): ... yield 1 ... return 2 ... >>> for i in f(): ... print(i) ... 1 This is a source of confusion https://stackoverflow.com/questions/47831240/why-is-no-value-returned-from-my-generator/ especially since the PEP says it is disallowed: https://www.python.org/dev/peps/pep-0255/#then-why-not-allow-an-expression-on-return-too |
|||
| msg316913 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * ![]() |
Date: 2018-05-17 11:40 | |
It is not silently ignored. It is used as an argument to construct StopIteration. See The Python Language Reference: https://docs.python.org/3/reference/simple_stmts.html#the-return-statement |
|||
| msg316918 - (view) | Author: FHTMitchell (FHTMitchell) | Date: 2018-05-17 12:21 | |
Apologies if I wasn't clear. I understand that
def f():
yield 1
return
is valid python. What I'm saying, if you follow the link, is that
def f():
yield 1
return 2 # not the argument
should not be considered valid python according to PEP 255. This is implemented in python 2 but not in python 3.
|
|||
| msg316919 - (view) | Author: FHTMitchell (FHTMitchell) | Date: 2018-05-17 12:23 | |
Whoops I understand. Reclosed. |
|||
| msg316967 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * ![]() |
Date: 2018-05-17 17:22 | |
See also What’s New In Python 3.3: https://docs.python.org/3/whatsnew/3.3.html#pep-380-syntax-for-delegating-to-a-subgenerator And PEP 380 itself. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:59:00 | admin | set | github: 77736 |
| 2018-05-17 17:22:34 | serhiy.storchaka | set | messages: + msg316967 |
| 2018-05-17 12:23:12 | FHTMitchell | set | status: open -> closed resolution: not a bug messages: + msg316919 |
| 2018-05-17 12:21:26 | FHTMitchell | set | status: closed -> open resolution: not a bug -> (no value) messages: + msg316918 |
| 2018-05-17 11:40:44 | serhiy.storchaka | set | status: open -> closed nosy:
+ serhiy.storchaka resolution: not a bug |
| 2018-05-17 11:33:26 | FHTMitchell | create | |
