Re: [Python-Dev] Tricky way of of creating a generator via a comprehension expression

2017年11月22日 21:26:33 -0800

On Thu, Nov 23, 2017 at 3:36 PM, Greg Ewing <[email protected]> wrote:
> Paul Moore wrote:
>>
>> 3. List comprehensions are the same as list(the equivalent generator
>> expression).
>
>
> I don't think that's ever been quite true -- there have
> always been odd cases such as what happens if you
> raise StopIteration in list(generator_expression).
You mean if the genexp leaks one? That's basically an error either way
- the genexp will raise RuntimeError, but it's still an exception.
>>> from __future__ import generator_stop
>>> def boom(): raise StopIteration
...
>>> [x if x < 3 else boom() for x in range(5)]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<stdin>", line 1, in <listcomp>
 File "<stdin>", line 1, in boom
StopIteration
>>> list(x if x < 3 else boom() for x in range(5))
Traceback (most recent call last):
 File "<stdin>", line 1, in <genexpr>
 File "<stdin>", line 1, in boom
StopIteration
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
RuntimeError: generator raised StopIteration
>>>
So that's _one_ difference removed (mostly).
ChrisA
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to