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

Barry A. Warsaw barry@zope.com
Sun, 14 Jul 2002 22:41:16 -0400


The problem that Jeff Epler brought up (extending the list after
StopIterator was returned, and having a subsequent .next() not give
StopIterator) has a precedence in dict iterators:

-------------------- snip snip --------------------
>>> d = {1:2, 3:4}
>>> it = iter(d)
>>> for x in d: print x
... 
1
3
>>> d[5] = 6
>>> it.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
RuntimeError: dictionary changed size during iteration
-------------------- snip snip --------------------

So why doesn't that last .next() also return StopIterator? <wink>.
StopIterator is a sink state for dict iterators if I don't change the
size of the dict.  Shouldn't list and dict iterators should behave
similarly for mutation (or at least resizing) between .next() calls?

-Barry