Armin Rigo added the comment:
Just to add my comment to this 7-years-old never-resolved issue: in PyPy 3.5,
which behaves like Python 3.x in this respect, I made the following
constructions give a warning.
def wrong_listcomp():
return [(yield 42) for i in j]
def wrong_gencomp():
return ((yield 42) for i in j)
def wrong_dictcomp():
return {(yield 42):2 for i in j}
def wrong_setcomp():
return {(yield 42) for i in j}
SyntaxWarning: 'yield' inside a list or generator comprehension behaves
unexpectedly (http://bugs.python.org/issue10544)
The motivation is that none of the constructions above gives the "expected"
result. In more details:
- wrong_listcomp() doesn't even return a list at all. It's possible to have a
clue about why this occurs, but I would say that it is just plain wrong given
the ``return [...]`` part of the syntax. The same is true for wrong_dictcomp()
and wrong_setcomp().
- wrong_gencomp() returns a generator as expected. However, it is a generator
that yields two elements for each i in j: first 42, and then whatever was
``send()`` into the generator. I would say that it is in contradiction with
the general idea that this syntax should give a generator that yields one item
for each i in j. In fact, when the user writes such code he might be expecting
the "yield" to apply to the function level instead of the genexpr level---but
none of the functions above end up being themselves generators.
For completeness, I think there is no problem with "await" instead of "yield"
in Python 3.6.
How about fixing CPython to raise SyntaxWarning or even SyntaxError?
----------
nosy: +arigo
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue10544>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com