discarded iterator.next() at interactive global scope doesn't bump interator??

Bengt Richter bokr at oz.net
Sun Sep 4 03:46:37 EDT 2005


Is this a well known bug that's been fixed?
I couldn't find any discussion of it, but maybe my googling's off today ;-/

 >>> def foo():
 ...     it = iter(range(10))
 ...     while True:
 ...         i = it.next()
 ...         print i
 ...         if i&3==0:
 ...             print 'skipping next'
 ...             it.next()
 ...
 >>>

------------------< This looks ok:
 >>> foo()
 0
 skipping next
 2
 3
 4
 skipping next
 6
 7
 8
 skipping next
 Traceback (most recent call last):
   File "<stdin>", line 1, in ?
   File "<stdin>", line 4, in foo
 StopIteration
 >>>
------------< now at interactive global scope:
 >>> it = iter(range(10))
 >>> while True:
 ...     i = it.next()
 ...     print i
 ...     if i&3==0:
 ...         print 'skipping next'
 ...         it.next()
 ...
-----<this doesn't look ok: it.next() is apparently not doing anything:
 0
 skipping next
 1
 2
 3
 4
 skipping next
 5
 6
 7
 8
 skipping next
 9
 Traceback (most recent call last):
   File "<stdin>", line 2, in ?
 StopIteration

----------------------------< but add a print, and all is well??
 >>> it = iter(range(10))
 >>> while True:
 ...     i = it.next()
 ...     print i
 ...     if i&3==0:
 ...         print 'skipping next'
 ...         print '-->', it.next()
 ...
 0
 skipping next
 --> 1
 2
 3
 4
 skipping next
 --> 5
 6
 7


 8
 skipping next
 --> 9
 Traceback (most recent call last):
   File "<stdin>", line 2, in ?
 StopIteration

I guess it could be in the read-eval-print loop

I have an old 2.4 on NT4 and am running it in a console window.
Python 2.4b1 (#56, Nov  3 2004, 01:47:27)
[GCC 3.2.3 (mingw special 20030504-1)] on win32
Type "help", "copyright", "credits" or "license" for more information. 

Regards,
Bengt Richter



More information about the Python-list mailing list