Сегодня я столкнулся с ошибкой, потому что я использовал next()
для извлечения значения, а "не найден" выбрал StopIteration
.
Обычно это останавливает программу, но функция, использующая next
, вызывается внутри итерации all()
, поэтому all
просто заканчивается раньше и возвращается True
.
Это ожидаемое поведение? Существуют ли стильные руководства, которые помогают избежать такого рода вещей?
Упрощенный пример:
def error(): return next(i for i in range(3) if i==10)
error() # fails with StopIteration
all(error() for i in range(2)) # returns True