pyautogui.locateCenterOnScreen 返回NoneType错误

Posted Jason_WangYing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pyautogui.locateCenterOnScreen 返回NoneType错误相关的知识,希望对你有一定的参考价值。

代码如下:

import pyautogui

pyautogui.PAUSE = 1 # 调用在执行动作后暂停的秒数,只能在执行一些pyautogui动作后才能使用,建议用time.sleep
# pyautogui.FAILSAFE = True # 启用自动防故障功能,左上角的坐标为(0,0),将鼠标移到屏幕的左上角,来抛出failSafeException异常
pyautogui.FAILSAFE = False

img_point = pyautogui.locateCenterOnScreen("img/project.png", grayscale=False)
print(img_point)

结果报如下错误

Traceback (most recent call last):
  File "C:/Users/liucx/Desktop/python/windows服务器监控/控制桌面程序.py", line 24, in <module>
    img_point = pyautogui.locateCenterOnScreen("img/project.png", grayscale=False)
  File "C:\\Users\\liucx\\Anaconda3\\lib\\site-packages\\pyautogui\\screenshotUtil.py", line 112, in locateCenterOnScreen
    return center(locateOnScreen(image, grayscale))
  File "C:\\Users\\liucx\\Anaconda3\\lib\\site-packages\\pyautogui\\screenshotUtil.py", line 180, in center
    return (coords[0] + int(coords[2] / 2), coords[1] + int(coords[3] / 2))
TypeError: 'NoneType' object is not subscriptable

这个发现是由于在lib\\site-packages\\pyautogui\\screenshotUtil.py里面的175行,这里没有用try方法,如果上一步112行这里返回None的话,那么下面的175行这里也会直接报错不再运行了,解决办法是在175行那里添加try方法:

def center(coords):
    print(coords)
    try:
        return (coords[0] + int(coords[2] / 2), coords[1] + int(coords[3] / 2))
    except:
        return coords
    # return (coords[0] + int(coords[2] / 2), coords[1] + int(coords[3] / 2))

以上是关于pyautogui.locateCenterOnScreen 返回NoneType错误的主要内容,如果未能解决你的问题,请参考以下文章