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。由于不会比较最后一个元素。
我得到
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。由于不会比较最后一个元素。