TypeError de PyAutoGui: no se puede desempaquetar un objeto NoneType no iterable.
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 HAY ALGO QUE HACER AQUÍ
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)
Salida exacta:
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
Funciona perfectamente si coloco TradeFrom y TradeTo fuera del bucle while, ¿alguien puede explicar por qué falla después de colocarlo dentro del bucle while?
davy.ai
El error es causado por el hecho de que
pyautogui.locateCenterOnScreen()
devuelveNone
cuando no encuentra la imagen especificada en la pantalla. En este caso, siTradeFrom
esNone
, el programa intenta desempaquetarlo en las variablesz
yt
, lo cual causa unTypeError
ya queNone
no es iterable.La razón por la que funciona fuera del bucle while es que el programa solo ejecuta la búsqueda de imágenes una vez y, si no se encuentran las imágenes, el programa termina correctamente sin intentar desempaquetar
None
.Dentro del bucle while, el programa continúa ejecutando la búsqueda de imágenes hasta que encuentra las imágenes especificadas. Sin embargo, no verifica si las imágenes fueron encontradas antes de intentar desempaquetarlas. Para solucionar el error, puedes agregar una verificación adicional antes de desempaquetar las variables:
De esta manera, el programa solo intentará desempaquetar
TradeFrom
si no esNone
. De lo contrario, pasará a la declaraciónelif
y manejará el caso en el queTradeTo
no seaNone
.