str.find(sub [,start [,end]])在Python中找不到sub时返回-1

时间:2015-06-17 11:10:36

标签: python

我理解方法:

str.find
如果找不到sub,

将返回-1。

是否有使用值-1的具体原因?对于某些涉及字符串的进一步计算,它是否是任意的或者是否有用?

我试图理解选择该值的原因。

5 个答案:

答案 0 :(得分:3)

string.find

  

返回s中找到子字符串sub的最低索引,使sub完全包含在s[start:end]中。失败时返回-1。 开始结束的默认值,负值的解释与切片相同。

因为它应该返回索引,所以当找不到子字符串时返回-1是有意义的(这通常也是大多数编程语言中的行为)。

如果您希望引发Exception,请使用string.index方法。

答案 1 :(得分:1)

我已就这个问题做了大量研究,并提出了以下建议。正如在这里的许多答案中已经说过的那样,在传统的编程语言或早期编程语言中,编码器通过使函数返回特殊值来处理错误。然而,这样做的结果是,调用返回某个值的函数的任何其他代码都必须检查是否返回了值并专门处理它。

在较新的语言(如Python)中,当我们无法生成与函数规范一致的结果时,我们可能会引发异常。虽然在20世纪60年代,语言中的异常处理很明显。以下文章解释说,直到80年代和90年代,设计问题才得以解决。 What language was the first to implement exception handling?

因此,我的结论是,在可以以多种方式处理错误生成的异常处理的高级实现之前,返回一些任意值的原始方法基本上都是可以完成的,直到更高级的方法为止。创建

答案 2 :(得分:0)

find 方法返回" sub "的从零开始的索引。在给定的字符串中。这是在Java,C#和JavaScript等许多其他语言中使用的惯例。如果" sub "找不到-1然后返回。

除了常识和惯例之外,我真的无法想到这种行为的任何其他原因。

答案 3 :(得分:0)

当字符串搜索出现空时返回-1是基于以下事实:对于0索引字符串,返回0是一个模糊的返回值...请考虑以下示例:

# returns 0 (i.e. found at position 0)
"positional".find("pos")

# return -1 (i.e. for not found at all)
"positional".find("not there")

许多编程语言都使用相同的返回值。

答案 4 :(得分:0)

使用

-1而不是False,因为该方法旨在返回一个整数(如果找到)。