On Thu, Nov 23, 2017 at 3:36 PM, Greg Ewing <greg.ew...@canterbury.ac.nz> 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 Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com