You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyAutoGUI脚本运行一段时间后报cannot unpack non-iterable NoneType错误解决方案

PyAutoGUI脚本报错原因与修复方案

错误产生原因

  • 核心问题是代码中连续两次调用了pyautogui.locateOnScreen接口:第一次调用用来判断目标是否存在,第二次调用直接对返回结果做解包赋值。两次调用存在毫秒级的时间差,刚好在这个间隔内画面中的archer.png目标消失、或者识别置信度不达标,第二次调用就会返回None,对None执行四变量解包操作就会触发该TypeError。
  • 额外注意:locateOnScreen返回的四个值对应左边界坐标、上边界坐标、目标宽度、目标高度,原代码中的变量名width、high命名有误,后续点击实际用的是左上角坐标,命名不准确容易后续维护出错。

修复后的代码

from pyautogui import *
import pyautogui
import time
import keyboard
import random
import win32api, win32con

time.sleep(3)

def click(x, y):
    win32api.SetCursorPos((x, y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)

while keyboard.is_pressed('q') == False:
    # 仅调用一次识别接口,把结果存到变量中
    target_pos = pyautogui.locateOnScreen('archer.png', confidence=0.8, region=(260, 760, 1400, 200))
    if target_pos is not None:
        left, top, width, height = target_pos
        # 点击目标左上角位置,如果你要点击中心可以改成 left + width//2, top + height//2
        click(left, top)
    # 可选:增加小间隔降低CPU占用,根据需求调整
    time.sleep(0.01)

优化说明

  • 仅调用一次图像识别接口,既避免了两次调用结果不一致的问题,也减少了重复识别的性能开销
  • 可调整点击坐标为目标中心,避免识别到的目标边缘点击无效的问题
  • 增加循环间隔降低CPU占用,不会影响识别时效性

内容的提问来源于stack exchange,提问作者Barszcz Mielony OFFICIAL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 01:06:01