首页 > 解决方案 > IndexError:while 循环中的列表超出范围

问题描述

因此,当我需要更改以下代码的代码位置时,我正在编辑我的大型自动化脚本。将代码放在脚本的上方位置后,我突然开始收到以下错误:

  File "C:\Users\User\Desktop\clicker.py", line 198, in <module>
    while a[i] != None:
IndexError: list index out of range  

我尝试检查索引,但它们似乎很好。我不知道如何进一步调试它。奇怪的是错误显示在while循环的末尾(如果它只在开始时显示,我知道如何修复它)。这意味着列表中的每个检测到的坐标都会被执行,并且当不再存在坐标时它会在最后失败。我的代码是:

 # convert broken xls to working xlsx
    pyautogui.click(x=75, y=746)
    sleep(1)
    pyautogui.click(pyautogui.locateCenterOnScreen('C:/Users/User/Documents/Clicker/downloads.png'))
    sleep(3)
    a = list(pyautogui.locateAllOnScreen('C:/Users/User/Documents/Clicker/excel.png'))
    i=0
    while a[i] != None:
        x, y = pyautogui.center(a[i])
        pyautogui.click(x, y, clicks=2)
        sleep(4)
        pyautogui.click(pyautogui.locateCenterOnScreen('C:/Users/User/Documents/Clicker/yes.png'))
        sleep(2.5)
        try:
            pyautogui.click(pyautogui.locateCenterOnScreen('C:/Users/User/Documents/Clicker/editing.png'))
        except TypeError:
            print("No need to press editing mode")
        # click file
        pyautogui.click(x=29, y=50)
        sleep(1)
        # click save as
        pyautogui.click(x=50, y=312)
        sleep(1)
        # click on drop down menu
        pyautogui.click(x=814, y=177)
        sleep(2)
        # select .xlsx
        pyautogui.click(x=814, y=200)
        sleep(1)
        # click save
        pyautogui.click(x=920, y=170)
        sleep(2)
        # close excel
        pyautogui.click(x=997, y=14)
        sleep(2)
        i+=1
    #-----EXCEL------------

标签: pythonpython-3.xpyautogui

解决方案


while a[i] != None:
    x, y = pyautogui.center(a[i])

相反,使用

for i in range(len(a)):
    x, y = pyautogui.center(a[i])

或者,因为你不i用于其他任何事情,

for item in a:
    x, y = pyautogui.center(item)

请查看有关循环的材料。你应该从那里学到这些技术。


推荐阅读