By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,742 Members | 1,224 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,742 IT Pros & Developers. It's quick & easy.

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

P: n/a
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
Sep 4 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
Bengt Richter wrote:

[it.next() appears to be a noop in the interactive interpreter]
I guess it could be in the read-eval-print loop


Indeed:
for i in range(5): .... 42
....
42
42
42
42
42

Whereas:
for i in range(5): .... None


Every line with an expression that doesn't evaluate to None is echoed.
Therefore

it.next()

and

print it.next()

look the same when repr(it.next()) == str(it.next()).

No bug :-)

Peter

Sep 4 '05 #2

P: n/a
On Sun, 04 Sep 2005 10:10:33 +0200, Peter Otten <__*******@web.de> wrote:
Bengt Richter wrote:

[it.next() appears to be a noop in the interactive interpreter]
I guess it could be in the read-eval-print loop


Indeed:
for i in range(5):... 42
...
42
42
42
42
42

Whereas:
for i in range(5):... None


Every line with an expression that doesn't evaluate to None is echoed.
Therefore

it.next()

and

print it.next()

look the same when repr(it.next()) == str(it.next()).

No bug :-)

D'oh. I said it, but I didn't hear myself ;-/

Regards,
Bengt Richter
Sep 4 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.