On 22 November 2017 at 15:56, Yury Selivanov
"await" in generator expressions works *correct*. I explained it here: https://bugs.python.org/issue32113
To clarify a bit more:
r = (V for I in X)
is equivalent to:
def _(): for I in X: yield V r = _()
The docs don't actually say that this equivalence is definitive. There's a lot of vagueness - possibly because the equivalence wasn't precise in 2.X (due to name leakage) and it wasn't updated to say that comprehensions are now defined *precisely* in terms of this equivalence. But surely this means that: 1. await isn't allowed in comprehensions/generator expressions, because the dummy function (_ in your expansion above) is not a coroutine function. 2. yield expressions in a comprehension.generator will yield extra values into the generated list (or the stream returned from the generator epression). That seems wrong to me, at least in terms of how I'd expect such an expression to behave. So I think there's a problem with treating the equivalence as the definition - it's informative, but not normative.
Making 'await' a SyntaxError is absolutely not an option. Async generator expressions are a shorthand syntax for defining asynchronous generators (PEP 525), and it's already being used in the wild.
But by the logic you just described, await isn't (or shouldn't be) allowed, surely? Paul