python - 发生异常:TypeError 无法解压不可迭代的 NoneType 对象
问题描述
我正在研究一个 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)
解决方案
我添加了一个名为 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
推荐阅读
- flask - WTFforms 字段值在不需要时初始化
- javascript - 替换字符串的最后一部分,javascript
- spring-boot - Glassfish 中的 Spring Websockets - WebSocket 握手期间出错:发送非空“Sec-WebSocket-Protocol”标头但未收到响应
- django-channels - 在 Django Channels 中的 Django Rest 框架中获取会话集
- java - 如何修复使用#2nd 记录而不是#1st(#3rd 而不是#2nd 等)的游标?
- gradle - 如何在 gradle 5+ 中为 shadowJar 插件指定归档分类器
- curl - 使用 LexikJWTAuthenticationBundle 和 Symfony 3.4 创建身份验证令牌
- r - x$data[i, j] <- value 中的错误:要替换的项目数不是替换长度的倍数
- c# - 生成的pdf文件的分辨率
- html - 如何最好地创建这个箭头形状的 div/按钮?