不了解此“索引超出范围”错误的原因

时间:2019-10-18 23:17:30

标签: python excel python-3.x

我知道这是一个简单的问题,但是我似乎无法弄清楚为什么它会给我这个错误。

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 :(得分:0)

您正在尝试访问数组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

答案 1 :(得分:0)

您的变量结果是一个列表(而不是字典)。

您只能将其追加到列表中,或将现有值替换为其索引。

执行上述代码时,不会给出计数器索引。您可以使用

添加下一个索引
d1.values()

或者您可以更改

d3 = dict(zip(map(int, d1.values()), d2.values()))

print(d3)

>>> {1: 'Apple', 2: 'Banana', 3: 'Strawberry', 4: 'Kiwi'}

restults.append(result)

这使它成为字典。这里的索引既不必是数字,也不必严格递增。

如果您不需要计数器的显式int,请使用append方法。