代码之家  ›  专栏  ›  技术社区  ›  jjnguy Julien Chastang

我必须在python中引起valueerror吗

  •  4
  • jjnguy Julien Chastang  · 技术社区  · 16 年前

    我有这个代码:

    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 回复  |  直到 16 年前
        1
  •  9
  •   John Millikin    16 年前

    注意,后一种方法与普遍接受的 EAFP, or "It is Easier to Ask for Forgiveness than Permission." 而前者紧随其后。

        2
  •  7
  •   Jerub    16 年前
    if element in mylist:
        index = mylist.index(element)
        # ... do something
    else:
        # ... do something else
    
        3
  •  0
  •   Brian    16 年前

    对于特定情况,如果列表是一系列单个字符串,则可以通过将要搜索的列表提前更改为字符串(例如“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.
    

    如果您在列表中进行大量搜索,这也可能会更好。如果只是一个一次性的搜索列表,那就不值得做了。