Должен ли я вызвать ValueError в Python - PullRequest
4 голосов
/ 25 сентября 2008

У меня есть этот код:

chars = #some list

try:
    indx = chars.index(chars)
except ValueError:
    #doSomething
else:
   #doSomethingElse

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

chars = #some list

indx = chars.index(chars)

if indx == -1:
    #doSomething
else:
   #doSomethingElse

Есть ли способ, которым я могу это сделать?

Ответы [ 3 ]

9 голосов
/ 25 сентября 2008

Обратите внимание, что последний подход идет вразрез с общепринятой "питонической" философией EAFP, или "Проще просить прощения, чем разрешения". , тогда как первый следует ему.

7 голосов
/ 25 сентября 2008
if element in mylist:
    index = mylist.index(element)
    # ... do something
else:
    # ... do something else
0 голосов
/ 25 сентября 2008

Для конкретного случая, когда ваш список представляет собой последовательность односимвольных строк, вы можете получить то, что хотите, изменив поиск в списке на строку заранее (например, '' .join (chars)).

Затем вы можете использовать метод .find (), который работает так, как вы хотите. Тем не менее, нет никакого соответствующего метода для списков или кортежей.

Другой возможный вариант - использовать словарь. например.

d = dict((x, loc) for (loc,x) in enumerate(chars))
...
index = d.get(chars_to_find, -1)  # Second argument is default if not found.

Это также может работать лучше, если вы выполняете много поисков в списке. Если это всего лишь один поиск в одноразовом списке, его не стоит делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...