Возвращаемое значение не игнорируется, но только генераторы дают значения , а return
просто заканчивает генератор, в этом случае раньше. Продвижение генератора никогда не достигает инструкции yield
в этом случае.
Всякий раз, когда итератор достигает «конца» значений для выхода, появляется StopIteration
. Генераторы не являются исключением. Однако с Python 3.3 любое выражение return
становится значением исключения:
>>> def gen():
... return 3
... yield 2
...
>>> try:
... next(gen())
... except StopIteration as ex:
... e = ex
...
>>> e
StopIteration(3,)
>>> e.value
3
Используйте функцию next()
для продвижения итераторов вместо прямого вызова .__next__()
:
print(next(x))