Хороший способ справиться с этим - поднять StopIteration , которое возникает, когда у вашего итератора ничего не осталось, и вызывается next()
.Это также изящно вырвется из цикла for, и внутри цикла ничего не будет выполнено.
Например, при наличии кортежа (0, 1, 2, 3)
Я хочу получить перекрывающиеся пары ((0, 1), (1, 2), (2, 3))
.Я мог бы сделать это так:
def pairs(numbers):
if len(numbers) < 2:
raise StopIteration
for i, number in enumerate(numbers[1:]):
yield numbers[i], number
Теперь pairs
безопасно обрабатывает списки с 1 номером или меньше.