python syntax async-await discord discord.py

Python[sintaxis no válida] con definición asíncrona



syntax async-await (2)

A partir de la versión 3.7 async y await son palabras clave reservadas.

Me gusta el error en la imagen de abajo.

Copie y abra la ruta (sin __init__.py ). Obtendrá una lista de archivos .py

Cambie el nombre de async.py a _async.py o lo que desee, ya que async es ahora una palabra clave reservada para nosotros desde la versión 3.7.

Una vez cambiado el nombre, modifique el nuevo nombre en todas partes.

* NOTA Aunque no es una solución permanente, funcionó para mí en caso de que se produzca el mismo error de sintaxis al trabajar con firebase. La mejor solución es ir con la versión anterior de Python. Es decir, la versión de abajo 3.7.

Estoy intentando escribir bots de discordia usando Python, me he encontrado y junté este bot.

import discord import asyncio import random client = discord.Client() inEmail = input("Email:") inPassword = input("Passwd:") async def background_loop(): await client.wait_until_ready() while not client.is_closed: channel = client.get_channel("************") messages = ["Hello!", "How are you doing?", "Testing!!"] await client.send_message(channel, random.choice(messages)) await asyncio.sleep(120) client.loop.create_task(background_loop()) client.run(inEmail, inPassword)

Sin embargo, cuando intenté ejecutarlo, recibí un SyntaxError :

File "1.py", line 7 async def background_loop(): ^ SyntaxError: invalid syntax

¿Porqué es eso? Nunca había recibido eso antes cuando lo probé.


Python introdujo solicitudes asíncronas en v3.3 , si está ejecutando Python antes de v3.3 (incluida v2.X), tendrá que instalar una versión más nueva de Python.

Solo si está ejecutando Python 3.3: asyncio no es parte de stdlib, tendrá que instalarlo manualmente desde pypi :

pip install asyncio

Las palabras clave async y await solo son válidas para Python 3.5 o posterior . Si está utilizando Python 3.3 o 3.4, deberá realizar los siguientes cambios en su código:

  1. Use el decorador @asyncio.coroutine lugar de la declaración async :

async def func(): pass # replace to: @asyncio.coroutine def func(): pass

  1. Utilice el yield from lugar de await :

await coroutine() # replace to: yield from coroutine()

Este es un ejemplo de lo que debe cambiar su función (si está en 3.3-3.4):

import asyncio @asyncio.coroutine def background_loop(): yield from client.wait_until_ready() while not client.is_closed: channel = client.get_channel("************") messages = ["Hello!", "How are you doing?", "Testing!!"] yield from client.send_message(channel, random.choice(messages)) yield from asyncio.sleep(120)

La sintaxis mencionada aún se admite en las versiones más nuevas de Python 3, pero se recomienda usar await y async si no hay necesidad de ser compatible con Python 3.3-3.4. Puede consultar esta documentation , aquí hay un breve fragmento de código:

El tipo de async def de coroutine se agregó en Python 3.5, y se recomienda si no hay necesidad de soportar versiones anteriores de Python.

Aparte:

discord.py actualmente admite 3.4.2-3.6.6, ( no admite 3.3-3.4.1, 3.7 a partir de julio de 2018 ). En un futuro cercano, planean aumentar la versión mínima de Python a 3.5.3.