@zlodiak

Почему выводится ошибка после выполнения корутина?

Я создаю, инициализирую и запускаю простейший корутин, но в консоли, кроме ожидаемого вывода, выводится ещё сообщение об ошибке

#!/usr/bin/env python3

def subgen():
  print('first iteration')
  message = yield
  print('second iteration')
  print('recieved', message)

# 1
g = subgen()

# 2
g.send(None)
# next(g)

# 3
g.send('ok')

print(g)

# при первой итерации выполняется то, что до yield
# при второй итерации в yield передаётся "ок" и выполняется всё что после yield


Вывод консоли:
first iteration
second iteration
recieved ok
Traceback (most recent call last):
  File "./index.py", line 17, in <module>
    g.send('ok')
StopIteration


Скажите пожалуйста, можно ли избежать этого сообщения об ошибке? Или то, что оно есть это правильно? То есть как только корутин завершается, то он штатно выбрасывает исключение StopIteration?
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
APodgorny
@APodgorny
Попробуйте так:

def subgen():
    while True:
        print('first iteration')
        message = (yield)
        print('second iteration')
        print('recieved', message)

# 1
g = subgen()

# 2
g.send(None)

# 3
g.send('ok')

print(g)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы