string.find()中可选的start参数的TypeError

时间:2011-09-15 20:50:11

标签: python string python-2.x

我在理解这种情况时遇到了一些麻烦。当我运行以下内容时:

def find_in_string(string, ch):
    count = 0
    index = 0
    while 0 <= index < len(string):
        if string.find(string, ch, index) != -1:
            return True

find_in_string('asdfasdf', 's')

这是我得到的:

TypeError: slice indices must be integers or None or have an __index__ method

然而,通过解释器运行这样:

index = 0
if string.find('asdfasdf', 's', index) != -1:
    return True

返回'True'。所以我不理解string.find如何在上面的函数中没有为起始索引传递一个整数。任何建议表示赞赏!

修改 无论出于何种原因,上述功能现在可以在再次导入字符串后工作也许咖啡太多了?

1 个答案:

答案 0 :(得分:1)

您的误解似乎来自导入string模块以及命名变量string

您无需导入模块即可使用find,如果您确实需要导入模块以执行其他操作,则可以将变量命名为其他内容。

类型为str而非string

find不起作用。你的意思是

string.find(ch) # ', index' if you want

如果您的变量名为string

str.find(string, ch) # ', index' if you want

如果您的变量名为string并且您确实想要在类/类型str上访问它(没有理由)。

您在搜索的字符串上调用find,除非您在类/类型上访问find,否则不会手动将字符串传递给findfind首先手动传递的参数是要搜索的字符串,后跟startend索引。由于您似乎在搜索整个字符串,因此可以省略它们。