Python Glossary English

все Python 3Исключенияисключение

StopIteration

встроенные исключения

Сигнализирует об исчерпании итератора. Автоматически перехватывается циклом for и генераторами — вручную поднимать нужно редко.

Синтаксис

raise StopIteration

Главная ловушка — PEP 479: если StopIteration вылетит наружу из тела генератора (скажем, из необработанного внутреннего next()), Python подменит его на RuntimeError, а не тихо оборвёт генератор — завершать генератор нужно обычным return. Вторая: StopIteration наследуется от Exception, поэтому широкий except Exception проглотит сигнал конца итерации вместе с настоящими ошибками. Когда исчерпание итератора — штатная ситуация, вместо try/except берите next(it, default).

Примеры

it = iter([1, 2])
next(it)  # 1
next(it)  # 2
next(it)  # StopIteration
# В генераторе завершайте через return: raise StopIteration здесь даёт RuntimeError (PEP 479)
def gen():
    yield 1
    return  # автоматически поднимает StopIteration

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности