【问题标题】:Exception has occurred: TypeError cannot unpack non-iterable NoneType object发生异常:TypeError 无法解压不可迭代的 NoneType 对象
【发布时间】:2020-11-28 20:37:36
【问题描述】:

我正在开发一个 python 机器人,旨在为点击游戏自动切换鼠标位置,但我一直随机收到此错误。我认为每次运行 while 命令时都给它一个值会修复它,但它没有显示任何改进。从我使用该程序看到的情况来看,如果它扫描并没有找到它试图定位的 2 个图像中的任何一个。

错误信息:

Exception has occurred: TypeError
cannot unpack non-iterable NoneType object
  File "C:\Users\gpetr\Desktop\New folder (3)\program.py", line 21, in <module>
    px, py = eyeloc

代码如下:

from pyautogui import *
import pyautogui
import time
import keyboard
import random
import win32api, win32con

def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)

eyeloc = 997, 456

while keyboard.is_pressed('q') == False:
    eyeloc = 997, 456
    if pyautogui.locateOnScreen('pink.png', region=(576, 160, 842, 592), confidence=0.8)  != None:
        eyeloc = pyautogui.locateCenterOnScreen('pink.png', region=(576, 160, 842, 592), confidence=0.8)
        print("pink")
        px, py = eyeloc  
        pyautogui.moveTo(px, py+130, 0.2)
        time.sleep(0.4)
    elif pyautogui.locateOnScreen('gold.png', region=(576, 160, 842, 593), confidence=0.8)  != None:
        eyeloc = pyautogui.locateCenterOnScreen('gold.png', region=(576, 160, 842, 592), confidence=0.8)
        print("gold")
        gx, gy = eyeloc
        pyautogui.moveTo(gx, gy+130, 0.2)
        time.sleep(0.4)     

【问题讨论】:

  • 你能添加完整的错误信息吗?错误发生在哪一行?
  • 欢迎来到 SO!查看tour。如需调试帮助,请提供包含错误的minimal reproducible example。它将帮助我们和您更好地理解问题。
  • 我最好的猜测是locateCenterOnScreen正在返回None,所以当你尝试解压它时,就会抛出错误
  • 您在 locateCenterOnScreen 后是否在检查 ImageNotFoundException
  • 还要查看您在locateOnScreenlocateCenterOnScreen 中传递的区域参数。值是 region=(576, 160, 842, 592)region=(576, 160, 842, 593)。 592 与 593

标签: python python-3.x


【解决方案1】:

我添加了一个名为 eyelocc 的 eyeloc 副本,它在 while 命令之外被赋予了一个值。如果我添加在第一个里面

if eyeloc == None:
    eyeloc = eyelocc

在第一次结束时,如果 eyelocc 取 eyeloc 的值,以便下一次 eyeloc 等于 none 时,它​​将接收它的最后一个可用值。 我运行该程序大约 10 分钟,没有遇到任何问题。 代码的最终草稿如下所示:

from pyautogui import *
import pyautogui
import time
import keyboard
import random
import win32api, win32con

eyelocc = 997, 456

while keyboard.is_pressed('q') == False:
    if pyautogui.locateOnScreen('pink.png', region=(576, 160, 842, 592), confidence=0.8)  != None:
        eyeloc = pyautogui.locateCenterOnScreen('pink.png', region=(576, 160, 842, 592), confidence=0.8)
        if eyeloc == None:
            eyeloc = eyelocc
        px, py = eyeloc
        pyautogui.moveTo(px, py+130, 0.2)
        time.sleep(0.4)
        eyelocc = eyeloc
    elif pyautogui.locateOnScreen('gold.png', region=(576, 160, 842, 593), confidence=0.8)  != None:
        eyeloc = pyautogui.locateCenterOnScreen('gold.png', region=(576, 160, 842, 592), confidence=0.8)
        if eyeloc == None:
            eyeloc = eyelocc
        gx, gy = eyeloc
        pyautogui.moveTo(gx, gy+130, 0.2)  
        time.sleep(0.4)    
        eyelocc = eyeloc

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    相关资源
    最近更新 更多