(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但没有成员[重复]

在 Python 中运行一个不返回任何内容的线程

如何在 Discord 机器人项目中运行额外的 Python 代码

Discord 机器人代码不起作用(python)。我该如何解决?

如何使用 Python 中的 API 使用 Discord 聊天机器人发送新闻?

Discord bot命令不起作用返回错误