簡體   English   中英

Pyautogui TypeError: 'NoneType' 對象不可迭代

[英]Pyautogui TypeError: 'NoneType' object is not iterable

我正在嘗試使用locateCenterOnScreen()函數,但是它引發了:

Traceback (most recent call last):
  File "C:\Users\windows\Desktop\asd.py", line 3, in <module>
    buttonx, buttony = pyautogui.locateCenterOnScreen('who.jpg')
TypeError: 'NoneType' object is not iterable

我的代碼是:

import pyautogui

buttonx, buttony = pyautogui.locateCenterOnScreen('who.jpg')
pyautogui.doubleClick(buttonx,buttony)

我該如何解決這個問題?

此處的 Pyautogui 文檔中,方法 locateCenterOnScreen 在無法在屏幕上找到圖像時返回 None 。

請注意,您正在尋找此方法的 2 個結果,但 None 只是一個結果(因為該方法通常返回兩個,這對我來說似乎是糟糕的設計——它應該引發一個異常,或者至少返回一個包含兩個的元組無對象)。

看看下面的例子,這基本上就是你發生的事情:

>>> foo,bar = None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not iterable

在我看來,解決這個問題的最簡單和最 Pythonic 的方法就是嘗試抓住它:

try:
    buttonx,buttony = pyautogui.locateCenterOnScreen('who.jpg')
except TypeError:
    """ Do something to handle the fact that the image was not found"""

編輯:為了回答您在評論中提出的問題,似乎對該庫的工作方式或它在屏幕上找到的內容存在誤解。 您可以通過一些圖像為庫提供它需要查找的內容的表示。 當該圖像無損時,它的效果要好得多,因為它是一種精確的逐像素表示。 然后,庫會在您的計算機屏幕上搜索所提供圖像所代表的實際事物。 正如您提出的問題,它不會找到 jpeg 或 png。 它找到實際的渲染對象。 因此,如果您在桌面上對 Web 瀏覽器的圖標進行屏幕截圖,它會從該屏幕截圖中找到實際的圖標並單擊它,但前提是它是可見的。 如果它在其他窗口或其他東西后面,它不會找到它。 它不會在屏幕上搜索圖標文件,而是搜索圖標本身的渲染。 因此,例如,如果您向庫提供了實際的 .ico 文件,如果它被另一個窗口覆蓋,它將無法找到該圖標,即使該圖標在技術上位於您的桌面上,因為它當前未呈現。

為了簡化事情 - locateCenterOnScreen()方法應返回圖像的中心 (x,y) 坐標,如您所稱的“who.jpg”,僅當它存在於屏幕上時。 否則,如果在屏幕上找不到“who.jpg”圖像 - 方法應該返回“無”。

您不能為 (x,y) 坐標分配 'NONE' 值,因為您會得到一個值 ('NONE') 和兩個正在等待接收某個值的變量。 這就是您收到“TypeError”的原因。

嘗試使用異常,這是在程序執行期間可能發生的事件 -> 例如 TypeError。 嘗試預測甚至可能在執行過程中發生的其他事件,您將很高興完成您的任務!

為方便起見,請嘗試以下代碼:

try:
    buttonx, buttony = pyautogui.locateCenterOnScreen('who.jpg')
    pyautogui.click(buttonx, buttony)
except TypeError:
    print("A TypeError has been occured!")

如果圖像大小為 1920x1080,圖像調用大約需要 1 或 2 秒。

因此,請嘗試下面的代碼。

import pyautogui 導入時間

時間.sleep(2)

buttonx, buttony = pyautogui.locateCenterOnScreen('who.jpg') pyautogui.doubleClick(buttonx,buttony)

你將能夠解決你的困難。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM