Это новая функция в Python 3.3 (как отмечает комментарий, она даже не работает в 3.2). Подобно return
в генераторе уже давно эквивалентен raise StopIteration()
, return
в генераторе теперь эквивалентен raise StopIteration(
. По этой причине исключение, которое вы видите, должно быть напечатано как StopIteration: 3
, и это значение доступно через атрибут value
для объекта исключения. Если генератор делегирован использовать синтаксис (также новый) yield from
, это результат. Подробнее см. PEP 380 .
def f():
return 1
yield 2
def g():
x = yield from f()
print(x)
# g is still a generator so we need to iterate to run it:
for _ in g():
pass
Отправляет 1
, но не 2
.