【发布时间】:2017-04-16 20:26:10
【问题描述】:
我正在使用 python 2.7 和 ipython2.7。 在 ipython 我试过了:
class Fib(object):
def __init__(self, max):
super(Fib, self).__init__()
self.max = max
def __iter__(self):
self.a = 0
self.b = 1
return self
def __next__(self):
fib = self.a
if fib > self.max:
raise StopIteration
self.a, self.b = self.b, self.a + self.b
return fib
def main():
fib = Fib(100)
for i in fib:
print i
if __name__ == '__main__':
main()
嗯,它报错了:
TypeError Traceback(最近一次调用最后一次) 在 () 22 23 如果 name == 'main': ---> 24 主() 25
<ipython-input-21-f10bd2d06666> in main()
18 def main():
19 fib = Fib(100)
---> 20 for i in fib:
21 print i
22
TypeError: iter() returned non-iterator of type 'Fib'
这段代码实际上来自互联网。语法对我来说似乎没问题,但问题是如何发生的?
谢谢。
【问题讨论】:
-
它在 Python 3 中运行良好。您要么必须开始使用 Python 3,要么更新代码以使用 Python 2。
-
我现在知道了,__next__() 是针对 Python3 而 next() 是针对 Python 2.7。这太棘手了!
标签: python exception types iterator ipython