[Python-3000] Is this a bug with list comprehensions or not?
Adam Olsen
rhamph at gmail.com
Sat Jul 12 02:59:47 CEST 2008
On Fri, Jul 11, 2008 at 6:11 PM, Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
> Stefan Behnel wrote:
>
>> While I agree with this being bad design, I do think that the above is a
>> bug.
>> It's a different thing if the iterable in the list comp/genexp raises a
>> StopIteration, or if the conditional does it. And not silently catching
>> anything raised by the latter sounds like the right thing to me.
>
> From some experiments I just did using bare genexps and calling
> next() on them, I don't think anything is being silently caught
> in the genexp. What's happening is that the surrounding list()
> constructor is performing another level of iteration over the
> results of the genexp, and *that* is what's being stopped by
> the StopIteration.
>
> I don't see how this can be fixed, because there's no way for
> the list() constructor to know where the StopIteration is coming
> from.
It can be fixed in the genexp by declaring it erroneous and raising a
RuntimeError when encountered. The list() constructor will see the
RuntimeError instead, which will get propagated properly.
--
Adam Olsen, aka Rhamphoryncus
More information about the Python-3000
mailing list