在为列表编写二进制搜索方法时,我决定在通过二进制搜索方法确定的列表的较小片上使用内置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)
start
和stop
所在地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()
的参数,尽管错误消息指示了什么?这是一个错误吗?
答案 0 :(得分:3)
这是如何解析参数的错误。有关字符串方法的相同错误,请参阅issue #1259和issue #11828。
是的,文档暗示索引在粗略中使用的方式与切片相同,而用于解析这些参数的内部实用程序函数会产生误导性的错误消息。
列表错误似乎挂起了API中的更改以及将获得修复的版本,或者,如果错误消息应该被修复,则显示错误。