hualuo 发表于 2019-1-2 20:34:27

请教Raise StopIteration

class Fibs:
    def __init__(self,n = 20):
      self.a = 0
      self.b = 1
      self.n = n
    def __iter__(self):
      return self
    def __next__(self):
      self.a,self.b = self.b,self.a + self.b
      if self.a > self.n:
            raise StopIteration
      return self.a

>>> fibs = Fibs()
>>> for each in fibs:
        print(each)

       
1
1
2
3
5
8
13
>>>

当满足self.a > self.n时 抛出raise StopIteration    是不是就不执行 return self.a了   所以就打印到13

TCY 发表于 2019-1-2 20:55:04

StopIteration是告诉for结束循环

jiajiaself 发表于 2020-3-4 16:15:41

TCY 发表于 2019-1-2 20:55
StopIteration是告诉for结束循环

raise StopIteration 不应该会抛出一个异常吗?为什么运行的时候只是自动结束迭代,并没有抛出异常?

Stubborn 发表于 2020-3-4 18:48:32

jiajiaself 发表于 2020-3-4 16:15
raise StopIteration 不应该会抛出一个异常吗?为什么运行的时候只是自动结束迭代,并没有抛出异常?

StopIteration会被for循环捕捉到

bravsheng 发表于 2021-8-14 10:22:55

很好的问题,我也注意到了,有点像break的效果
页: [1]
查看完整版本: 请教Raise StopIteration