IndexError: индекс кортежа вне диапазона.Вызовите переменную класса списка внутри функции класса - PullRequest
0 голосов
/ 19 декабря 2018

Я получаю

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 - это список: диапазоны [640].Я думаю, что перезаписываю список диапазонов, когда передаю его в качестве аргумента, но я не уверен и не знаю, как это исправить

Ответы [ 4 ]

0 голосов
/ 19 декабря 2018

Просто измените оператор цикла с помощью

for i in range(len(array) - 1):

Он будет перебирать только от 0 до n-1.Поскольку последний элемент не будет сравниваться.

0 голосов
/ 19 декабря 2018

Здесь:

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
0 голосов
/ 19 декабря 2018

На последней итерации i = 639 и массив [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)
0 голосов
/ 19 декабря 2018

Конечно, потому что range(X) возвращает 0 .. X-1.Таким образом, в вашем цикле for i in range(len(array)) на последней итерации вы получаете i, равный максимальному индексу в массиве.

И попытка доступа к array[i+1] вызывает исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...