WhatsApp bot代码运行报'NoneType' object is not subscriptable错误如何解决
错误产生原因
这个报错的核心原因是pt.locateOnScreen()方法执行后返回了None,后续代码直接对None执行[0:2]的切片操作,而None类型不支持下标取值/切片,所以触发该异常。
locateOnScreen返回None的常见触发场景:
- 当前屏幕没有完整显示
punto.png对应的目标图案,被窗口遮挡、处于后台或者在其他虚拟桌面 - 你设置的
confidence=0.7匹配置信度过高,实际屏幕上的目标和截图存在色差、缩放、模糊等差异,无法匹配成功 punto.png文件路径错误,程序没有读取到对应图片,直接返回None- 设备开启了高DPI缩放,pyautogui没有适配系统缩放比例,导致图像匹配失效
修复方案
首先需要在获取到position后先做非空判断,再执行后续操作,优化后的代码如下:
def punto_verde(self): try: position = pt.locateOnScreen("punto.png", confidence= .7) # 新增非空判断,匹配失败直接跳过后续操作 if not position: print("未匹配到目标图像punto.png") return pt.moveTo(position[0:2], duration = self.speed) pt.moveRel(-100, 0,duration = self.speed) pt.doubleClick(interval= self.click_speed) except Exception as e: print("Exception (punto_verde):", e)
你还可以根据自己的使用场景做进一步优化:
- 适当降低匹配置信度,比如调整到0.5~0.6,提升模糊匹配的成功率
- 重新截取
punto.png,保证截图和实际运行时屏幕上的目标图案大小、颜色、角度完全一致,不要截取多余的边缘区域 - 如果是Windows系统高DPI设备,可以在代码初始化阶段添加DPI适配逻辑:
import ctypes ctypes.windll.user32.SetProcessDPIAware() - 填写
punto.png的绝对路径,避免因为工作目录变动导致的文件读取失败
内容的提问来源于stack exchange,提问作者help me pls
相关产品推荐
相关产品推荐

