StopIteration
выбрасывается next
, а не yield from
:
next(iterator[, default])
Получить следующий элемент из итератор путем вызова его __next__()
метода.Если задано default , оно возвращается, если итератор исчерпан, в противном случае StopIteration
повышается.
Таким образом, вы можете вместо этого обернуть вызов next
.
def h(lst):
yield from lst
def next_or_print(it):
try:
next(it)
except StopIteration:
print('ST')
Затем вы используете его так:
>>> t = h([1,2])
>>> next_or_print(t)
1
>>> next_or_print(t)
2
>>> next_or_print(t)
ST
Обратите внимание, что next
также имеет второй аргумент, который позволяет предоставить значение по умолчанию вместо StopIteration
:
>>> t = h([1,2])
>>> next(t, 'ST')
1
>>> next(t, 'ST')
2
>>> next(t, 'ST')
ST