У меня есть код, который выглядит примерно так:
thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
хорошо, это упрощено, но вы поняли идею. Теперь thing
может не быть в списке, и в этом случае я хочу передать -1 как thing_index
. На других языках это то, что вы ожидаете index()
вернуть, если он не может найти элемент. Фактически он выбрасывает 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]
что это допустимое выражение, означающее последнюю запись в списке.