Re: Problems found while inspecting 2005->2007 debdiffs
Frank Küster <frank@debian.org> wrote:
> To me, that sounds like a very peculiar feature (or rather bug) in
> Python, since it is contrary to to what one expects.
Yes, that's rather... surprising.
> Is it documented?
Yes. And it confirms my guess. This is the "Warning" paragraph at the
end of:
http://docs.python.org/ref/for.html
,----
| Warning:
|
| There is a subtlety when the sequence is being modified by the loop
| (this can only occur for mutable sequences, i.e. lists). An internal
| counter is used to keep track of which item is used next, and this is
| incremented on each iteration. When this counter has reached the
| length of the sequence the loop terminates. This means that if the
| suite deletes the current (or a previous) item from the sequence, the
| next item will be skipped (since it gets the index of the current item
| which has already been treated). Likewise, if the suite inserts an
| item in the sequence before the current item, the current item will be
| treated again the next time through the loop. This can lead to nasty
| bugs that can be avoided by making a temporary copy using a slice of
| the whole sequence, e.g.,
|
| for x in a[:]:
| if x < 0: a.remove(x)
`----
--
Florent
Reply to: