Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: generator, stopiteration

Как определить, что генератор завершился?

Вопрос проверяет понимание того, как генераторы сигнализируют о завершении и как это обрабатывается в Python.

Короткий ответ

Генератор считается завершённым, когда он больше не может вернуть значения. В этом случае при вызове next() возбуждается исключение StopIteration. Обычно разработчик не обрабатывает это вручную, потому что цикл for перехватывает StopIteration автоматически. Если же используется next() напрямую, завершение можно определить через try/except.

Длинный ответ

Генератор возвращает значения, пока в его коде встречаются yield. Когда выполнение функции доходит до конца или выполняется return, генератор сигнализирует о завершении.

Определение: StopIteration — исключение, которое сообщает, что итератор или генератор исчерпан и больше не имеет элементов.

Основные способы определить завершение

  1. Через for
    Цикл for сам отслеживает завершение генератора:

for x in gen():
    print(x)
# Когда значения заканчиваются, цикл просто завершится
  1. Через next() и обработку исключения

g = gen()
while True:
    try:
        print(next(g))
    except StopIteration:
        print("Генератор завершился")
        break
  1. Через функцию next(..., default)
    Можно указать значение по умолчанию:

value = next(g, None)
# Если генератор завершён, вернётся None

Дополнительный момент

Если в генераторе используется return value, это значение передаётся в объект StopIteration и доступно как e.value, но в обычных циклах это значение не используется.

Вывод

Генератор считается завершённым, когда при очередном next() возникает StopIteration. В большинстве случаев это обрабатывается автоматически циклом for.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Python

    Python

Ключевые слова

#generator

#stopiteration

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.