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



我知道该方法:

str.find

如果未找到 sub,将返回 -1。

使用值 -1 是否有特定原因? 它是任意的还是对于涉及字符串的进一步计算使用 -1 有用?

我试图理解选择该值的原因(如果有的话)。

string.find

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

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

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

我对这个问题做了很多研究,并提出了以下内容。 正如本文中的许多答案所述,在传统的编程语言或早期的编程语言中,程序员通过让函数返回特殊值来处理错误。但是,这样做的结果是,调用返回某个值的函数的任何其他代码都必须检查是否返回了值并专门处理它。

在 Python 等较新的语言中,当我们无法产生与函数规范一致的结果时,我们可以引发异常。 虽然异常处理在 1960 年代的语言中很明显。 下面的帖子解释说,直到 80 年代和 90 年代,设计问题才基本得到解决。 什么语言是第一个实现异常处理的?

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

当字符串搜索为空时返回 -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")

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

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

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

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

最新更新