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.

El bot de Telegram en Python se bloquea con el error “NoneType no puede ser utilizado en ‘await'”.

Estoy utilizando una plantilla del repositorio de un bot de gestión de Telegram que se puede encontrar aquí. El módulo RSS del repositorio está actualmente basado en SQL, y estoy tratando de cambiar a mongodb.

Así que agregué un nuevo módulo RSS (código).
y es mongodb (código).

Cuando intento ejecutarlo, se bloquea con el siguiente error:

2022-01-06T16:15:43.076256+00:00 app[worker.1]: 2022-01-06 16:15:43,075 - pyrogram.dispatcher - ERROR - el objeto NoneType no se puede usar en una expresión 'await'
2022-01-06T16:15:43.076264+00:00 app[worker.1]: Rastreo de pila (última llamada):
2022-01-06T16:15:43.076264+00:00 app[worker.1]:   Archivo "/app/.heroku/python/lib/python3.8/site-packages/pyrogram/dispatcher.py", línea 217, en handler_worker
2022-01-06T16:15:43.076265+00:00 app[worker.1]:     await handler.callback(self.client, *args)
2022-01-06T16:15:43.076265+00:00 app[worker.1]:   Archivo "/app/SophiaBot/utils/errors.py", línea 54, en capture
2022-01-06T16:15:43.076266+00:00 app[worker.1]:     raise err
2022-01-06T16:15:43.076266+00:00 app[worker.1]:   Archivo "/app/SophiaBot/utils/errors.py", línea 32, en capture
2022-01-06T16:15:43.076267+00:00 app[worker.1]:     return await func(client, message, *args, **kwargs)
2022-01-06T16:15:43.076268+00:00 app[worker.1]:   Archivo "/app/SophiaBot/modules/rss.py", línea 124, en add_feed_func
2022-01-06T16:15:43.076268+00:00 app[worker.1]:     if await is_rss_active(chat_id):
2022-01-06T16:15:43.076268+00:00 app[worker.1]:   Archivo "/app/SophiaBot/function/rssdb.py", línea 30, en is_rss_active
2022-01-06T16:15:43.076269+00:00 app[worker.1]:     return await rssdb.find_one({"chat_id": chat_id})
2022-01-06T16:15:43.076269+00:00 app[worker.1]: TypeError: el objeto NoneType no se puede usar en una expresión 'await'

¿Cuál es la mejor manera de resolver este problema?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que el código está intentando usar un objeto de tipo NoneType en una expresión de espera, lo cual no está permitido. Esto puede surgir si el objeto que se está esperando no es realmente un objeto esperable (awaitable), o si no ha sido inicializado correctamente. Para resolver este problema, puedes seguir los siguientes pasos:

    1. Verifica que el módulo mongodb esté instalado en el entorno donde se está ejecutando el código y que sea la última versión.
    2. Asegúrate de que el módulo pymongo esté correctamente importado al principio del archivo donde se define el módulo RSS de mongodb.

    3. Verifica que la base de datos mongodb y la colección donde se está almacenando los datos hayan sido configuradas e inicializadas correctamente.

    4. Asegúrate de que el método que se está llamando con await sea realmente un método esperable. En este caso, podría ser el método is_rss_active en el archivo rssdb.

    5. Para solucionar el problema, puedes modificar el código para usar un bloque try-except que capture el TypeError y manejarlo de una manera apropiada para tu aplicación. Dentro de este bloque, puedes verificar si el objeto que se está esperando es None y luego manejarlo de manera adecuada, ya sea generando una excepción, registrando un error o devolviendo un valor por defecto.

    En general, es importante asegurarse de que todos los objetos que se están esperando estén correctamente inicializados y sean objetos esperables antes de usarlos en una expresión de espera (await expression).

Comments are closed.