問題描述
我正在嘗試使用 Python 編寫 discord 機器人,我遇到了這個機器人并將其拼湊在一起.
I am trying write discord bots using Python, I have come across and threw together this 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)
然而,當我嘗試運行它時,我收到了一個 SyntaxError
:
Yet when I tried to run it, I received a SyntaxError
:
File "1.py", line 7
async def background_loop():
^
SyntaxError: invalid syntax
這是為什么呢?我之前測試時從未收到過.
Why is that? I have never received that before when I tested it.
推薦答案
2021 年更新答案(discord.py 1.x - 2.x):
discord.py 目前支持 Python 3.5 及更高版本.如果您收到 SyntaxError
,則表示您使用的是舊版本的 Python,并且不被 discord.py 支持.
Updated answer for 2021 (discord.py 1.x - 2.x):
discord.py currently supports Python 3.5 and up. If you receive a SyntaxError
, it means you're using an older version of Python and isn't supported by discord.py.
首先,安裝更高版本的 Python(在此消息中首選 3.8.x),然后運行 ??python3.8 bot.py
或 py -3.8 bot.py運行機器人時的代碼>(適用于 Windows).注意:安裝時不要忘記選擇Add Python to PATH".
First, install a later version of Python (3.8.x is preferred as of this message), and run python3.8 bot.py
or py -3.8 bot.py
(for Windows) when running your bot. Note: when installing, don't forget to choose "Add Python to PATH".
在 v3.3 中將異步請求引入 Python,如果如果您運行的是 v3.3 之前的 Python(包括 v2.X),則必須安裝更新版本的 Python.
Asynchronous requests were introduced to Python in v3.3, if you're running Python prior to v3.3 (including v2.X), you'll have to install a newer version of Python.
僅在您運行 Python 3.3 時:asyncio
不是標準庫的一部分,你需要從 pypi 手動安裝它:
Only if you are running Python 3.3: asyncio
is not part of the stdlib, you'll need to install it manually from pypi:
pip install asyncio
async
和 await
關鍵字僅對 Python 3.5 或更新版本有效.如果您使用的是 Python 3.3 或 3.4,則需要對代碼進行以下更改:
The async
and await
keywords are only valid for Python 3.5 or newer. If you're using Python 3.3 or 3.4, you will need to make the following changes to your code:
- 使用
@asyncio.coroutine
裝飾器代替async
語句:
- Use the
@asyncio.coroutine
decorator instead of theasync
statement:
async def func():
pass
# replace to:
@asyncio.coroutine
def func():
pass
- 使用
yield from
而不是await
:
- Use
yield from
instead ofawait
:
await coroutine()
# replace to:
yield from coroutine()
這是您的函數需要更改為的示例(如果您使用的是 3.3-3.4):
Here is an example of what your function need to change into (if you're on 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)
較新版本的 Python 3 仍然支持上述語法,但如果不需要支持 Python 3.3-3.4,建議使用 await
和 async
.您可以參考這個 文檔,這里有一個簡短的片段:
The aforementioned syntax is still supported in newer versions of Python 3, but it is recommended to use await
and async
if there's no need to support for Python 3.3-3.4. You can refer back to this documentation, here's a short snippet:
async def
類型的協程是在 Python 3.5 中添加的,并且是如果不需要支持較舊的 Python 版本,建議使用.
The
async def
type of coroutine was added in Python 3.5, and is recommended if there is no need to support older Python versions.
旁白:
discord.py 目前支持 3.4.2-3.6.6,(不支持 3.3-3.4.1,截至 2019 年 1 月為 3.7).
Aside:
discord.py currently supports 3.4.2-3.6.6, (It does not support 3.3-3.4.1, 3.7 as of January 2019).
對于使用 discord.py 進行開發,我建議使用 discord.py 重寫分支:
For developing with discord.py, I suggest using the discord.py rewrite branch:
discord.py-重寫支持3.5.3-3.7.
discord.py-rewrite supports 3.5.3-3.7.
這篇關于帶有 async def 的 Python [無效語法]的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!