下面能够实现循环, 但是, 有个小问题, 就是循环完毕, 按照规范__next__ 应该抛出StopIteration
但奇怪的是for in 并没有对这个异常做处理, 而是继续抛出来了, 是这个异常不对吗?
如果, 去掉这个raise, 只是简单返回好像就不出错了。
from abc import ABC
class TestForin(ABC):
def __init__(self):
self.for_in = range(1,5)
pass
def __iter__(self):
return self.__next__()
def __next__(self):
for i in self.for_in:
yield i
else:
raise StopIteration()
if __name__ == "__main__":
f = TestForin()
for x in f:
print(x)
--
FROM 124.126.0.*