Проверяет понимание механизма завершения работы итераторов.
Когда элементы в итераторе заканчиваются, метод __next__() вызывает исключение StopIteration. Это сигнализирует Python (например, циклу for), что перебор завершён. Исключение обрабатывается автоматически.
Завершение итератора происходит, когда больше нет элементов для возврата. В этот момент:
Метод __next__() вызывает исключение StopIteration.
Цикл for, генераторы или функции вроде next() перехватывают это исключение и корректно завершают работу.
Дальнейшие вызовы __next__() будут вызывать StopIteration снова.
Пример с ручным вызовом:
numbers = iter([1, 2])
print(next(numbers)) # 1
print(next(numbers)) # 2
print(next(numbers)) # StopIterationКак обработать исключение:
iterator = iter([])
try:
next(iterator)
except StopIteration:
print("Итератор пуст!") # Сработает этоВажно:
StopIteration — штатный механизм, а не ошибка.
В генераторах (функциях с yield) StopIteration вызывается автоматически при завершении функции.
Вывод:
Исключение StopIteration — стандартный способ сообщить о конце итерации.