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