StopIteration

Приведенный выше пример будет продолжаться вечно, пока вы вызываете оператор next() или если используете в цикле for. Чтобы итерация не продолжалась вечно, мы можем использовать оператор StopIteration.

В метод __next __() мы можем добавить условие завершения, чтобы вызвать ошибку, если итерация выполняется указанное количество раз:

class MyNumbers:

    def __iter__(self):

        self.a = 1

        return self

   

    def __next__(self):

        if self.a <= 20: 

            x = self.a

            self.a += 1

            return x

        else:

            raise StopIteration

 

myclass = MyNumbers()

myiter = iter(myclass)

for x in myiter:

    print(x)

Вывод:

...

18

19

20