为什么array.index(" foo")引发异常而不是在没有找到元素的情况下返回-1?

时间:2016-12-15 09:22:25

标签: python

如果我想在Python中找到给定项目的数组索引,我会做这样的事情:

a = ["boo", "foo", "bar", "foz"]
i = a.index("foo")

i将是1

如果我正在寻找不存在的项目,则会引发ValueError异常。

问题:为什么提出异常而不是返回-1(因为JavaScript的等效函数indexOf)更好?我发现检查-1更容易,而不是在try-catch中包装代码块。

2 个答案:

答案 0 :(得分:3)

除了Daniel已经提到in his answer的索引反转论证之外,你必须记住,与JavaScript相比,异常是Python中更为核心的概念。

返回一些特殊值的想法,在这种情况下-1,当没有找到值时,是一个概念,它来自异常在语言中不是一个很好的概念。最值得注意的是,它来自C,其中特殊的返回值可能意味着各种各样的东西。

JavaScript借用了大部分内容,因为它也没有安全的异常处理方式。由于它是一种弱类型语言,它只能捕获所有异常类型,因此只捕获一些IndexNotFoundException并不会真正起作用。

然而,在Python中,异常是该语言的核心概念,并且它们被广泛用于许多特殊事物。因此,当项目不在列表中时,在这里使用它们是有意义的。

答案 1 :(得分:1)

python中的索引可以颠倒,-1表示最后一个:

a = ["boo", "foo", "bar", "foz"]
a[-1] == "foz"
True