Python菜鸟请教Python for循环问题

一叶小舟_郭 2019-06-30 09:33:59
环境是:anaconda + pycharm社区版
本人Python菜鸟一枚,跟随 廖雪峰的python教程学习Python时,按照示例写如下代码:

class Fib(object):
def __init__(self):
self.__a, self.__b = 0, 1 # 初始化两个计数器 a,b

def __iter__(self):
return self # 实例本身是迭代对象

def __next__(self):
self.__a, self.__b = self.__b, self.__a + self.__b
if self.__a > 100: # 设置退出循环的条件
return StopIteration()
return self.__a # 返回下一个值

def __getitem__(self, idx):
__a, __b = 1, 1
for x in range(idx):
__a, __b = __b, __a + __b
return __a


# 测试__iter__,__getitem__
for n in iter(Fib()):
print(n)

f = Fib()
print(f[0])
print(f[1])

遇到的问题是for循环不退出,导致后面的代码无法执行
通过调试发现n最后一直是StopIteration,但是就是不退出for循环
于是有了疑问:Python的for循环不是会自动处理StopIteration 异常么


...全文
149 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZhuCheng Xie 2019-07-04
  • 打赏
  • 举报
回复
StopIteration是个异常类,无法返回,会一直循环!
一叶小舟_郭 2019-06-30
  • 打赏
  • 举报
回复
谢谢,新手,没注意到这个问题,IDE也没个提示什么的……
罗卜基斯 2019-06-30
  • 打赏
  • 举报
回复
return StopIteration() StopIteration是个异常类,怎么可以返回呢? raise StopIteration("msg out: 已到世界尽头")

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧