Dangerous behavior of list(generator)

Steven D'Aprano steven at REMOVE.THIS.cybersource.com.au
Tue Dec 15 01:26:52 EST 2009


On Mon, 14 Dec 2009 15:26:25 -0800, Carl Banks wrote:

> On Dec 14, 2:48 pm, Steven D'Aprano <st... at REMOVE-THIS-
> cybersource.com.au> wrote:
>> On Mon, 14 Dec 2009 14:31:44 +0000, exarkun wrote:
>> > On 06:46 am, tjre... at udel.edu wrote:
>> >>On 12/13/2009 10:29 PM, exar... at twistedmatrix.com wrote:
>> >>>Doesn't matter. Sometimes it makes sense to call it directly.
>>
>> >>It only makes sense to call next (or .__next__) when you are prepared
>> >>to explicitly catch StopIteration within a try..except construct. You
>> >>did not catch it, so it stopped execution.
>>
>> >>Let me repeat: StopIteration is intended only for stopping iteration.
>> >>Outside that use, it is a normal exception with no special meaning.
>>
>> > You cut out the part of my message where I wrote that one might have
>> > forgotten the exception handling code that you posit is required, and
>> > that the current behavior makes debugging this situation
>> > unnecessarily challenging.
>>
>> I don't see why you think this is any more challenging to debug than
>> any other equivalent bug.
> 
> "Errors should never pass silently."

StopIteration isn't an error, it's a signal. The error is *misusing* 
StopIteration, and the above Zen no more applies than it would if I did 
x-y instead of y-x and complained that I got no traceback. Some errors 
are programming mistakes, and they are the deadliest error because they 
can and do pass silently. There's nothing you can do about that except 
Don't Make Mistakes.

 
> I'm not saying it's necessarily difficult to debug--although building a
> list by hand to test it is a lot more work than reading an exception
> traceback

Of course. Nobody said the life of a programmer was all beer and 
skittles :)


> --but it'a stark violation of a Zen and common sense, so it is
> more serious than other sorts of errors.

I'm happy to accept it is a Gotcha, but a bug? I'm not convinced.



-- 
Steven



More information about the Python-list mailing list