Idioms combining 'next(items)' and 'for item in items:'
Ian Kelly
ian.g.kelly at gmail.com
Mon Sep 12 12:55:14 EDT 2011
On Sun, Sep 11, 2011 at 6:45 PM, Terry Reedy <tjreedy at udel.edu> wrote:
> whereas, you are right, it breaks it noisily in the body. So Ian's claim
> that StopIteration must be caught to avoid silent termination is not true.
> Thanks for pointing out what I saw but did not cognize the full implication
> of before. A better exception and an error message with an explaination
> might still be a good idea, though.
But you can't write the function under the assumption that it will
only be called from the function body. The following is a slight
reorganization of your example that does exhibit the problem:
for title in map(fix_title, ['amazinG', 'a helL of a fiGHT', '', 'igNordEd']):
print(title)
Output:
amazing
a Hell of a Fight
Note that at first glance, my example would appear to be functionally
equivalent to yours -- I've merely pulled the fix_title call out of
the loop body and into the iterator. But actually they produce
different results because fix_title misbehaves by not catching the
StopIteration.
Cheers,
Ian
More information about the Python-list
mailing list