python raise触发异常为什么没有打印错误?

class Fibs: def __init__(self,n=10): self.a=0 self.b=1 self.n=n def __iter__(self): return self def __next__(self): self.a,self.b=self.b,self.b+self.a if self.a>self.n: raise StopIteration return self.afi=Fibs(15)for each in fi: print(each)
最新回答
重拾记忆的爱

2026-10-21 20:36:18

题主你好,

先说结果吧: 题主的代码没有问题, StopIteration异常也被抛出了.

下面说一下for循环从迭代器取值的逻辑题主应该就明白了:

正常情况下, for从迭代器中取值时, 在将迭代器中的元素消耗尽了以后, 迭代器都会抛出一个StopIteration异常给for语句, for语句检测到StopIteration异常后就知道迭代器不会再返回内容了, 也就将for循环给结束掉了, 也就是说StopIteration是被for循环内部消耗掉了, 你可以这样理解:

举个简单例子来说:

上面代码的执行过程是这样的:

    将[1,2,3]中的1赋给x,输出1;

    将[1,2,3]中的2赋给x,输出2;

    将[1,2,3]国的3赋给x,输出3;

    抛出StopIteration异常, for检测到StopIteration异常,结束for循环;

-------------

明白了上面的逻辑后, 题主也可以验证一下, 题主可以将if语句给注释掉, 然后执行一下, 看看输出结果.

希望可以帮到题主, 欢迎追问.

有错误也请指出, 谢谢!