Не понимаю причину ошибки «индекс вне диапазона» - PullRequest
0 голосов
/ 19 октября 2019

Я знаю, что это простой вопрос, но я не могу понять, почему он дает мне эту ошибку.

import datetime,openpyxl,re
wb = openpyxl.load_workbook("..\\test.xlsx")
print(wb.sheetnames)
sh = wb["July"]
def values():
    for counter in range(0,104):
        results=[""]
        for row in sh["B3":"I16"]:
            #print("\n")
            for cell in row:
                b = cell.value
                #print(b)
                #if b == "None":
                #   break
                #else:
                result = re.sub("[0-9]+","", str(b))
                result = re.sub(r'[£]',"",result)
                results[counter] = result
                if(results[counter] == "Room"
                   or results[counter] == "None"
                   or results[counter] == "****"
                   or results[counter] == "Double Bed"):
                    None
                else:
                    print(results[counter])
                    #result1 = result
                    #print(result,result1)

, и моя ошибка

Traceback (most recent call last):

File "C:\Users\***\Desktop\Automated Email\Test\Test.py", line 26, in <module>
    values()   File "C:\Users\***\Desktop\Automated Email\Test\Test.py", line 19, in values
    results[counter] = result

IndexError: list assignment index out of range

Что это за программанамеревался извлечь некоторые данные из этого тестового файла xlsx и отобразить их. после них я получаю только имя (не цену или знаки) из файла и отделяю некоторые другие пустые ячейки, после чего я хочу поместить их в массив, чтобы я мог сравнить его с предыдущими значениями и, если они совпадают толькораспечатайте его один раз.

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Результаты вашей переменной - это список (не словарь).

Вы можете только добавить в свой список или заменить существующие значения их значениями.

Когда вывыполнить приведенный выше код, счетчик индекса не указан. Вы можете либо добавить следующий индекс с помощью

restults.append(result)

, либо изменить

results=[]

на

results={}

, что делает его словарем. Здесь индекс не должен быть ни числом, ни строгим приращением.

Если вам не нужен явный int счетчика, используйте метод append.

0 голосов
/ 19 октября 2019

Вы пытаетесь получить доступ к индексу counter в вашем массиве results, но этот адрес еще не является частью вашего массива. вам нужно append ваше значение, чтобы добавить его в массив:

results.append(result) #adds the value `result` to your array at a new index
if results[counter] == "Room" or results[counter] == "None" or results[counter] == "****" or results[counter] == "Double Bed":
   None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...