Python 索引器:列表超出while循环的范围

Python 索引器:列表超出while循环的范围,python,python-3.x,pyautogui,Python,Python 3.x,Pyautogui,所以我在编辑我的大型自动化脚本,当我需要为下面的代码更改代码中的位置时。将代码放在脚本的上方后,我突然出现以下错误: File "C:\Users\User\Desktop\clicker.py", line 198, in <module> while a[i] != None: IndexError: list index out of range 相反,使用 for i in range(len(a)): x, y = pyautogui.center

所以我在编辑我的大型自动化脚本,当我需要为下面的代码更改代码中的位置时。将代码放在脚本的上方后,我突然出现以下错误:

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

for i in range(len(a)):
    x, y = pyautogui.center(a[i])
或者,由于您不使用
i
进行任何其他操作

for item in a:
    x, y = pyautogui.center(item)
请在回路上检查您的材料。你应该从那里学会这些技巧

相反,使用

for i in range(len(a)):
    x, y = pyautogui.center(a[i])
或者,由于您不使用
i
进行任何其他操作

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

请在回路上检查您的材料。你应该从那里学习这些技术。

首先,我强烈建议更新你的sleep()方法,使用等待方法,知道你的点击是否已加载。在不同的服务区域和wifi区域,您的网络并不总是超快或超慢,因此隐式地等待加载将确保您不会在某些内容尚未完成执行之前继续前进

其次,为什么不使用for循环呢?这样您就不需要跟踪索引

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'))
for item in a:
    x, y = pyautogui.center(item)
    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)
#-----EXCEL------------

首先,我强烈建议更新您的sleep()方法,以使用等待方法,这些方法可以知道您的单击是否已加载。在不同的服务区域和wifi区域,您的网络并不总是超快或超慢,因此隐式地等待加载将确保您不会在某些内容尚未完成执行之前继续前进

其次,为什么不使用for循环呢?这样您就不需要跟踪索引

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'))
for item in a:
    x, y = pyautogui.center(item)
    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)
#-----EXCEL------------

如果你有一个while循环,并且在每一项上增加索引,你没有看到在某个点上你会到达一个不存在的索引吗?还有,为什么不使用元素数正确的for循环呢?为什么代码在此之前可以工作?我不使用for循环,因为我不知道有多少excel文件(在本例中)。请解释一下您的困惑所在。您已经非常准确地描述了这种情况:您迭代了列表,直到用完了合法的索引,然后尝试进一步操作。你超出了范围。@Prune我想我知道什么地方出了问题,但我不知道如果我不知道没有while循环的文件的数量,我该如何修复它如果你有一个while循环,并且在每一项上增加索引,你没有看到在某个点上你会达到一个不存在的索引吗?还有,为什么不使用元素数正确的for循环呢?为什么代码在此之前可以工作?我不使用for循环,因为我不知道有多少excel文件(在本例中)。请解释一下您的困惑所在。您已经非常准确地描述了这种情况:您迭代了列表,直到用完了合法的索引,然后尝试进一步操作。你超出了范围。@Prune我想我知道什么地方出了问题,但我不知道如果我不知道没有一段时间的文件量,我该如何修复它。你可以编辑你的答案以包含等待方法吗?你也可以使用pyautogui的内置等待:
pyautogui.PAUSE=int()
自动设置每次移动后的睡眠时间,完成移动后也会发生这种情况,这将确保加载了click。您可以编辑您的答案以包含等待方法吗?您还可以使用pyautogui的内置等待:
pyautogui.PAUSE=int()
自动设置每次移动后的睡眠时间,并且在完成移动后也会发生这种情况,这将确保已加载click