PyAutoGui TypeError:无法解压不可迭代的 NoneType 对象

Posted

技术标签:

【中文标题】PyAutoGui TypeError:无法解压不可迭代的 NoneType 对象【英文标题】:PyAutoGui TypeError: cannot unpack non-iterable NoneType object 【发布时间】:2022-01-23 06:23:15 【问题描述】:
    import pyautogui
import cv2
import time
while(True):
    TradeFrom = pyautogui.locateCenterOnScreen("Screenshot_256.png", grayscale= True, confidence=0.9)
    TradeTo = pyautogui.locateCenterOnScreen("Screenshot_258.png", grayscale=True, confidence=0.9)
    if TradeFrom == None:
        if TradeTo == None:
           time.sleep(30)
           continue
        elif TradeTo != None:
           z,t=TradeFrom
           pyautogui.moveTo(z,t,3)
           pyautogui.rightClick()
           #TODO ÇOK YAPILACAK ŞEY VAR AMK
    else:
        x,y = TradeTo
        pyautogui.moveTo(x,y,3)
        pyautogui.rightClick()
        InviteToParty = pyautogui.locateCenterOnScreen("InviteToParty.png", grayscale= True, confidence=0.9)
        Invite_X,Invite_Y = InviteToParty
        pyautogui.moveTo(Invite_X,Invite_Y)

精确输出:

Traceback (most recent call last):
  File "C:/Users/emosc/PycharmProjects/heuheu/main.py", line 12, in <module>
    z,t=TradeFrom
TypeError: cannot unpack non-iterable NoneType object

如果我将 TradeFrom 和 TradeTo 放在 while 循环之外,一切正常,谁能解释为什么我把它放在 while 循环中后它会崩溃?

【问题讨论】:

不确定我能否具体回答您的问题,但更好的做法是声明 is None 而不是使用 == None 运算符。有关更多信息,请参阅:realpython.com/courses/python-is-identity-vs-equality 编辑:仔细观察,我认为您的问题是您正在尝试对 None 执行操作。将您的相等运算符更改为 is(即:if x == None 变为 if x is None,同样if y != None 变为 if y is not None)然后重试。 【参考方案1】:

我认为你需要修正逻辑。现在,您正在屏幕上寻找两个对象。您的声明是说,如果未找到第一个对象但第二个对象是,则从第一个对象分配坐标......这是 None ,这就是您的代码失败的原因。不确定预期的结果是什么,但不妨试试这个:

import pyautogui
import cv2
import time
while(True):
    TradeFrom = pyautogui.locateCenterOnScreen("Screenshot_256.png", grayscale= True, confidence=0.9)
    TradeTo = pyautogui.locateCenterOnScreen("Screenshot_258.png", grayscale=True, confidence=0.9)
    if TradeFrom == None:
        if TradeTo == None:
           time.sleep(30)
           continue
        elif TradeTo != None:
           z,t=TradeTo
           pyautogui.moveTo(z,t,3)
           pyautogui.rightClick()
           #TODO ÇOK YAPILACAK ŞEY VAR AMK
    else:
        x,y = TradeFrom
        pyautogui.moveTo(x,y,3)
        pyautogui.rightClick()
        InviteToParty = pyautogui.locateCenterOnScreen("InviteToParty.png", grayscale= True, confidence=0.9)
        Invite_X,Invite_Y = InviteToParty
        pyautogui.moveTo(Invite_X,Invite_Y)

另外,我建议你在 break 键中编码,这样很容易中断这个循环

【讨论】:

以上是关于PyAutoGui TypeError:无法解压不可迭代的 NoneType 对象的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法在 Django REST 框架中解压不可迭代的 int 对象

pyautogui无法输入中文

Python无法使用PyAutoGui补间将鼠标作为函数中的随机值移动

Pyautogui 无法在 Roblox 中正确移动鼠标

使用 Python 3.8.8 将 PyAutoGUI 导入 PyCharm 无法正常工作 [关闭]

是否可以在不使用 jenkins 上的“PyAutoGUI”库的情况下使用键盘操作?