У мене є код, який виглядає приблизно так:
thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
Ок, це спрощено, але ви розумієте. Зараз thing
насправді у списку може не бути, і в цьому випадку я хочу передати -1 як thing_index
. В інших мовах це очікування index()
повернення, якщо ви не зможете знайти елемент. Фактично це кидає a ValueError
.
Я міг би це зробити:
try:
thing_index = thing_list.index(thing)
except ValueError:
thing_index = -1
otherfunction(thing_list, thing_index)
Але це відчувається брудно, плюс я не знаю, чи ValueError
можна було б підняти з якоїсь іншої причини. Я придумав таке рішення на основі функцій генератора, але це здається трохи складним:
thing_index = ( [(i for i in xrange(len(thing_list)) if thing_list[i]==thing)] or [-1] )[0]
Чи є більш чистий спосіб досягти того самого? Припустимо, що список не відсортований.
str.find
метод, який робить саме це: повертається, -1
коли голку не знайдено в темі.
str.index()
викидає виняток, якщо рядок пошуку не знайдено.
thing_index
." - Це, безумовно, непітонічно. Передача (безглуздого) значення лексеми у випадку, якщо операція не вдається, нахмуриться - винятки справді є правильним способом. Тим більшеthing_list[-1]
, що це дійсний вираз, що означає останній запис у списку.