Can't get around "IndexError: list index out of range"

Fredrik Lundh fredrik at pythonware.com
Tue Oct 10 12:33:02 EDT 2006


Terry Reedy wrote:

> Is there an outer loop being 'break'ed?

yes.

> This break is swallowed by the for loop, so not exactly equivalent, I 
> think.

the code is supposed to break out of the outer loop when it runs out of 
lines, so yes, monkeeboy's code is broken in more than one way.

> In any case, these are both clumsy and I believe I would instead 
> write something like
> 
> for i in range(lineno, len(self.__lines)):
>   print self.__lines[i]

that doesn't do the same thing, either.

and you both seem to be missing that

     try:
         for loop over something:
             do something with something
     except IndexError:
         ...

is a common pydiom when you expect to process quite a few somethings, 
and you don't want to waste time on calculating end conditions up front 
or checking for end conditions inside the loop or otherwise looking 
before you leap (LBYL); the pydiom lets you process things as quickly as 
you possibly can, as long as you possibly can, and deal with the end of 
the sequence when you hit it (EAFP*).

</F>

*) insert martelli essay here




More information about the Python-list mailing list