[Python-ideas] Function to return first(or last) true value from list

Ethan Furman ethan at stoneleaf.us
Fri Feb 21 01:59:42 CET 2014


On 02/20/2014 02:38 PM, אלעזר wrote:
> 2014-02-21 0:00 GMT+02:00 Steven D'Aprano wrote:
>>
>> Why is it dangerous, and what kind of bug?
>>
>> If you're talking about the fact that next(it) can raise StopIteration,
>> I think you are exaggerating the danger. Firstly, quite often you don't
>> mind if it raises StopIteration, since that's what you would have done
>> anyway. Secondly, I don't see why raising StopIteration is so much more
>> dangerous than (say) IndexError or KeyError.
>>
> I had this bug just the other day. I did not plan for the empty case, since it was obvious that the empty case is a bug,
> so I relied on the exception being raised in this case. But I did not get the exception since it was caught in a
> completely unrelated for loop. It took me a while to figure out what's going on, and it would've taken even more for
> someone else, not familiar with my assumption or with the whole StopIteration thing (which I believe is the common
> case). An IndexError or a KeyError would have been great in such a case.

I think the basic problem is that a few exceptions are intended for the Python interpreter itself, but that's easy to 
forget, particularly since that list is so small:

   StopIteration
   ...
   um, any others?

Consequently we need to remind ourselves that we are not likely to see that exception under normal circumstances; and 
vice-a-versa, we need to remind ourselves to catch it if we are playing with next().

--
~Ethan~


More information about the Python-ideas mailing list