(Python) Discord 机器人代码返回“RuntimeError:无法关闭正在运行的事件循环”
Posted
技术标签:
【中文标题】(Python) Discord 机器人代码返回“RuntimeError:无法关闭正在运行的事件循环”【英文标题】:(Python) Discord bot code returns "RuntimeError: Cannot close a running event loop" 【发布时间】:2021-01-25 13:38:48 【问题描述】:我试图在 Spyder 中创建代码来启动我的 discord 机器人,但遇到以下错误:
Traceback(最近一次通话最后一次):
文件“”,第 1 行,在 runfile('C:/Users/Nathan/Desktop/HW/Python stuff/my_discord_bot.py', wdir='C:/Users/Nathan/Desktop/HW/Python stuff')
运行文件中的文件“C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”,第 827 行 execfile(文件名,命名空间)
文件“C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”,第 110 行,在 execfile exec(编译(f.read(),文件名,'exec'),命名空间)
文件“C:/Users/Nathan/Desktop/HW/Python stuff/my_discord_bot.py”,第 17 行,在 client.run('我的应用令牌')
文件“C:\ProgramData\Anaconda3\lib\site-packages\discord\client.py”,第 705 行,运行中 _cleanup_loop(循环)
文件“C:\ProgramData\Anaconda3\lib\site-packages\discord\client.py”,第 98 行,在 _cleanup_loop loop.close()
文件“C:\ProgramData\Anaconda3\lib\asyncio\selector_events.py”,第 83 行,关闭 raise RuntimeError("无法关闭正在运行的事件循环")
RuntimeError: 无法关闭正在运行的事件循环
我在网上搜索过,有人告诉我使用名为“nest_asyncio”的包。我pip安装了包,导入它,在控制台运行nest_asyncio.apply(),但是再次运行后代码仍然报同样的错误。
这是我的代码:
import discord
from discord.ext import commands
client = commands.Bot(command_prefix = '.')
@client.event
async def on_ready():
print ('Bot is ready.')
client.run('my application token')
顺便说一句,我用“我的应用程序令牌”替换了我的实际令牌,因为我不想与任何人共享它。
请帮忙。如何消除此错误并使其正常运行?
【问题讨论】:
【参考方案1】:(这里是 Spyder 维护者) 为了在 Spyder 中运行异步代码,您需要安装一个名为 nest-asyncio 的包并将这两行添加到代码中的第一行:
import nest_asyncio
nest_asyncio.apply()
【讨论】:
我这样做了,但由于某种原因,我的代码给出了同样的错误。 如果我们尝试在任何其他命令提示符或任何其他框架(如 django 或 flask)或任何其他环境(如 anaconda 或 jupiter)中运行,这可能是解决方案。【参考方案2】:我找到了解决方案。我没有使用 Spyder 的内置控制台,而是使用命令提示符来运行我的代码,这绕过了 RuntimeError。
【讨论】:
以上是关于(Python) Discord 机器人代码返回“RuntimeError:无法关闭正在运行的事件循环”的主要内容,如果未能解决你的问题,请参考以下文章
discord python:guild.members只返回bot但没有成员[重复]
如何在 Discord 机器人项目中运行额外的 Python 代码
Discord 机器人代码不起作用(python)。我该如何解决?