TypeError: iter() returned non-iterator of type 'MyIterable'

发布时间 2023-07-17 23:15:13作者: Allen_Hao
 1 class MyIterable:
 2     def __init__(self):
 3         self.data = [1, 2, 3]
 4 
 5     def __getitem__(self, index):
 6         return self.data[index]
 7 
 8     def __iter__(self):
 9         return MyIterator(self.data)
10 
11 
12 class MyIterator:
13     def __init__(self, data):
14         self.data = data
15         self.index = 0
16 
17     def __next__(self):
18         if self.index >= len(self.data):
19             raise StopIteration
20         value = self.data[self.index]
21         self.index += 1
22         return value
23 
24 
25 my_iterable = MyIterable()
26 
27 # 使用 for 循环迭代对象
28 for item in my_iterable:
29     print(item)  # 输出:1 2 3
30 # 多次迭代也会报错
31 for item in my_iterable:
32     print(item)  # 输出:1 2 3
33 
34 # 调用 iter() 函数获取迭代器对象
35 my_iterator = iter(my_iterable)
36 #  __next__ 也不会抛StopIteration异常
37 print(next(my_iterator))  # 输出:1
38 print(next(my_iterator))  # 输出:2
39 print(next(my_iterator))  # 输出:3