1. 程式人生 > >python 3.x 錯誤AttributeError: 'generator' object has no attribute 'next'

python 3.x 錯誤AttributeError: 'generator' object has no attribute 'next'

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