[Python-Dev] Termination of two-arg iter()

jepler@unpythonic.net jepler@unpythonic.net
Sat, 13 Jul 2002 19:04:26 -0500


On Sat, Jul 13, 2002 at 07:07:36PM -0400, Guido van Rossum wrote:
> Actually, not.  Under "Resolved Issues" the PEP has this:
> 
>     - Once a particular iterator object has raised StopIteration, will
>       it also raise StopIteration on all subsequent next() calls?
>       Some say that it would be useful to require this, others say
>       that it is useful to leave this open to individual iterators.
>       Note that this may require an additional state bit for some
>       iterator implementations (e.g. function-wrapping iterators).
> 
>       Resolution: once StopIteration is raised, calling it.next()
>       continues to raise StopIteration.
> 
> So I misremembered, and Tim didn't read the PEP closely enough. :-)
> 
> > I'm happy to leave this be: the docs match the implemenation, I'm
> > sure *someone* relies on that by now, and the behavior is easy to
> > explain as-is.
> 
> Hm.  Given what the PEP says, I'm ready to have this fixed (even in
> 2.2.2).  I can't call code relying on this sane.

What about this example?
>>> l = []
>>> li = iter(l)
>>> li.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
StopIteration
>>> l.extend([1, 2, 3])
>>> li.next()
1

does the list iterator violate the proposed behavior?

Jeff