IndexError: tuple index out of range. Call a list class variable inside a class function

IndexError: tuple index out of range. Call a list class variable inside a class function

我得到

IndexError: tuple index out of range

在我的脚本中包含这个:

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)

在某个class。 此行弹出错误:

if (array[i+1]-array[i])>0.3:

data.ranges 是一个列表:ranges[640]。 当我将它作为参数传递时,我认为我正在覆盖范围列表,但我不确定并且我不知道如何修复它

当然可以,因为 range(X) returns 0 .. X-1。因此,在上次迭代的循环 for i in range(len(array)) 中,您得到 i 等于数组中的最大索引。

并且尝试访问 array[i+1] 导致异常。

这里:

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

在最后一次迭代中,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。由于不会比较最后一个元素。