我是否必须在Python中引起ValueError

时间:2020-03-06 14:42:12  来源:igfitidea点击:

我有以下代码:

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

有办法吗?

解决方案

if element in mylist:
    index = mylist.index(element)
    # ... do something
else:
    # ... do something else

请注意,后一种方法违背了EAFP普遍接受的" pythonic"哲学,即"寻求宽恕比获得许可更容易"。

对于列表是单字符字符串序列的特定情况,我们可以通过将要搜索的列表预先更改为字符串来获得所需的内容(例如''.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.

如果我们在列表上进行大量搜索,则效果可能会更好。但是,如果仅是一次性列表中的单个搜索,则不值得这样做。