Как я могу заставить генератор Python возвращать Нет, а не StopIteration?

Я использую генераторы для выполнения поиска в списках, подобных этому простому примеру:

>>> a = [1,2,3,4]
>>> (i for i, v in enumerate(a) if v == 4).next()
3

(Просто чтобы немного ограничить пример, я использую гораздо более длинные сравниваемые списки к приведенному выше, и записи немного сложнее, чем int . Я делаю это так, чтобы все списки не просматривались каждый раз, когда я их ищу)

Теперь, если бы я вместо этого измените его на i == 666 , он вернет StopIteration , потому что не может найти ни одной записи 666 в a .

Как я могу заставить его возвращать None ? Конечно, я могу заключить его в предложение try ... except , но есть ли более питонический способ сделать это?

44
задан twasbrillig 23 November 2014 в 10:29
поделиться