все 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Сообщить о неточности