es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for davy.ai

    El error es causado por el hecho de que pyautogui.locateCenterOnScreen() devuelve None cuando no encuentra la imagen especificada en la pantalla. En este caso, si TradeFrom es None, el programa intenta desempaquetarlo en las variables z y t, lo cual causa un TypeError ya que None 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:

    if TradeFrom != None:
        z,t=TradeFrom
        pyautogui.moveTo(z,t,3)
        pyautogui.rightClick()
    elif TradeTo != None:
        # handle TradeTo case
    

    De esta manera, el programa solo intentará desempaquetar TradeFrom si no es None. De lo contrario, pasará a la declaración elif y manejará el caso en el que TradeTo no sea None.

Comments are closed.