python 3.x 錯誤AttributeError: 'generator' object has no attribute 'next'
阿新 • • 發佈:2019-01-01
def func():
for i in xrange(10):
yield i
f = func()
print(f)
print(f.next())
print(f.next())
print(f.next())
print(f.next())
print(f.next())
輸出
<generator object func at 0x7f6f7043f0a0>
0
1
2
3
4
上面的結果是在python2中可以輸出,這個沒有問題
同樣的程式碼在python3中執行就會出現
<generator object func at 0x7f4f76bf58e0>
Traceback (most recent call last):
File "test.py", line 20, in <module>
print(f.next())
AttributeError: 'generator' object has no attribute 'next'
這個是因為python 3.x中generator的next變了,不能這麼呼叫了,呼叫方法要改成
f.next()
def func():
for i in range(10):
yield i
f = func()
print(f)
print (f.__next__())
print(f.__next__())
print(f.__next__())
print(f.__next__())
print(f.__next__())
輸出
<generator object func at 0x7fa1b3f428e0>
0
1
2
3
4
上面的xrange函式也要改成 range python3中沒有xrange函式
至於怎麼相容版本…
from __future__ import division
from __future__ import print_function
import sys
def func():
for i in range(10):
yield i
f = func()
print(f)
if sys.version >'3':
print(f.__next__())
print(f.__next__())
print(f.__next__())
print(f.__next__())
else:
print(f.next())
print(f.next())
print(f.next())
print(f.next())
輸出
<generator object func at 0x7f4b141b90a0>
0
1
2
3
<generator object func at 0x7f10dc5f78e0>
0
1
2
3