我得到
IndexError:元组索引超出范围
在我的脚本上,其中包含以下内容:
def bump_detector(self, array):
for i in range(len(array)):
if (array[i+1]-array[i])>0.3:
DoorDetector.__bumps.append(i+1)
if (array[i]-array[i+1]>0.3):
DoorDetector.__bumps.append(i)
这个电话:
def cb(self, data):
self.bump_detector(data.ranges)
在某个班级。这一行弹出错误:
if (array[i+1]-array[i])>0.3:
data.ranges是一个列表:ranges[640]。当我把它作为参数传递时,我想我正在覆盖范围列表,但我不确定,也不知道如何修复
此处:
for i in range(len(array)):
if (array[i+1]-array[i]) > 0.3:
i
的最后值将是array
中的最后一个索引,因此i+1
确实超出范围。这里的问题相同FWIW:
if (array[i]-array[i+1] > 0.3):
您可以使用range(len(array) -1)
来解决此问题,或者更好地使用zip()
:
for x, y in zip(array, array[1:]):
if y - x > 0.3:
# do something
当然,因为range(X)
返回0 .. X-1
。所以在上一次迭代的循环for i in range(len(array))
中,i
等于数组中的最大索引。
尝试访问array[i+1]
会导致异常。
在上一次迭代中,i=639和array[640]不存在,因此出现IndexError。
def bump_detector(self, array):
for i in range(len(array) - 1): # Add a "-1" here
if (array[i+1]-array[i])>0.3:
DoorDetector.__bumps.append(i+1)
if (array[i]-array[i+1]>0.3):
DoorDetector.__bumps.append(i)
只需使用修改循环语句
for i in range(len(array) - 1):
它将只在0到n-1之间进行迭代。由于最后一个元素将不进行比较。