Сегодня я столкнулся с ошибкой, потому что я использовал 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