index()方法不接受无启动/停止

时间:2015-06-15 16:35:45

标签: python python-3.x

在为列表编写二进制搜索方法时,我决定在通过二进制搜索方法确定的列表的较小片上使用内置index()方法。但是在某些情况下我收到了错误:

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

只要列表低于一定长度,就会发生这种情况。导致它的代码是:

def iter_chop(target, a_list):
    arr = a_list[:]
    start = None
    stop = None
    <snip>
    return a_list.index(target, start, stop)

startstop所在地None

错误消息表明None是可接受的参数,它应该是有效的Python:

>>> a = [1,2,3,4,5]
>>> a[None:None]
[1, 2, 3, 4, 5]

所以我假设调用a.index(3, None, None)等同于调用a[None:None].index(3)。但是:

>>> a.index(3,None,None)
Traceback (most recent call last):
  File "<pyshell#199>", line 1, in <module>
    a.index(3,None,None)
TypeError: slice indices must be integers or None or have an __index__ method

我是否错误地假设如何处理index()的参数,尽管错误消息指示了什么?这是一个错误吗?

1 个答案:

答案 0 :(得分:3)

这是如何解析参数的错误。有关字符串方法的相同错误,请参阅issue #1259issue #11828

是的,文档暗示索引在粗略中使用的方式与切片相同,而用于解析这些参数的内部实用程序函数会产生误导性的错误消息。

列表错误似乎挂起了API中的更改以及将获得修复的版本,或者,如果错误消息应该被修复,则显示错误。