Enumerate question: Inner looping like in Perl

Alex Martelli aleaxit at yahoo.com
Sun Oct 31 05:09:28 EST 2004


Pekka Niiranen <pekka.niiranen at wlanmail.com> wrote:
   ...
> ...                   try:
> ...                           for i, char in itr:
> ...                                   print 'inner', i, char
> ...                                   if char == 'f':
> ...                                           break
> ...                   except StopIteration:
> ...                           print "f not found"
   ...
> Not working: Iter() takes care of its own exceptions?

Nope.  Rather, the 'for' statement does not propagate the StopIteration
exception that terminates it -- such a propagation would be extremely
disruptive of 99% of Python's programs, and I'm astonished that you
expected it!

What you want is, I believe, among the Tutorial's examples...:

for i, ch in itr:
    print 'inner', i, ch
    if ch == 'f': break
else:
    print 'f not found'

That's what the 'else' clause in a 'for' statement is for: it triggers
when the loop terminates normally (as opposed to ending with a break or
return or by propagating an exception).  The ability to deal with a "not
found" case, where the "found" cases exit by break, is the main use case
of this 'else' clause.

> This recurring feeling that writing REALLY correct programs in Python
> is not easier than in lower level languages... :(

I think that you can get all the info about Python you need for the
purpose (and then some) from "Python in a Nutshell", but of course I'm
biased...;-)


Alex



More information about the Python-list mailing list