如何结合if-else判断pyautogui.locateCenterOnScreen是否成功定位图片
PyAutoGUI 图片定位成功判断及异常规避方案
报错原因
pyautogui.locateCenterOnScreen方法在指定区域无法匹配到目标图片时,会返回None,直接对None执行a, b = xxx的解包操作,就会触发TypeError: cannot unpack non-iterable NoneType object错误。
解决代码
你可以先存储定位结果,判断非空后再解包使用,和你提供的if-else逻辑结合后的代码如下:
import pyautogui # 先接收定位结果,不直接解包 position = pyautogui.locateCenterOnScreen('~/home/file_01.png', region=(1065,250,385,700), confidence=0.9) if position is not None: # 定位成功再解包坐标 a, b = position print('Congratulations, you won!') # 此处添加定位成功后的业务逻辑 else: print("I'm sorry but you lost.") # 此处可添加定位失败后的逻辑,不需要可以删掉else分支 # 后续代码会正常执行,不会因为定位失败而中断
注意事项
- 建议显式使用
position is not None做判断,不要直接用if position的隐式布尔判断,可读性更高,也能避免空元组、0等特殊值被误判。 - 你原有示例里的
print('I'm sorry but you lost.')存在单引号冲突问题,需要把外层引号改为双引号,或者给内部的单引号添加转义符\,否则会触发语法错误。 - 如果需要提高定位成功率,可以在外层加循环逻辑,多次重试定位,达到最大重试次数后再走失败分支。
内容的提问来源于stack exchange,提问作者Tiel
相关产品推荐
相关产品推荐

