如何修复运行时错误:无法关闭正在运行的事件循环 - Python 不和谐机器人



我正在尝试使用 Python 创建一个 Discord 机器人,但是每当我在此处运行示例代码时:

import discord
client = discord.Client()
@client.event
async def on_message(message):
# we do not want the bot to reply to itself
if message.author == client.user:
return
if message.content.startswith('!hello'):
msg = 'Hello {0.author.mention}'.format(message)
await client.send_message(message.channel, msg)
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
client.run('tokenhere')

它返回错误:

Traceback (most recent call last):
File "<ipython-input-6-ea5a13e5703d>", line 1, in <module>
runfile('C:/Users/User/Pictures/rito_bot.py', wdir='C:/Users/User/Pictures')
File "C:UsersUserAnaconda3libsite-packagesspyder_kernelscustomizespydercustomize.py", line 703, in runfile
execfile(filename, namespace)
File "C:UsersUserAnaconda3libsite-packagesspyder_kernelscustomizespydercustomize.py", line 108, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/User/Pictures/rito_bot.py", line 22, in <module>
client.run('token')
File "C:UsersUserAnaconda3libsite-packagesdiscordclient.py", line 595, in run
_cleanup_loop(loop)
File "C:UsersUserAnaconda3libsite-packagesdiscordclient.py", line 97, in _cleanup_loop
loop.close()
File "C:UsersUserAnaconda3libasyncioselector_events.py", line 94, in close
raise RuntimeError("Cannot close a running event loop")
RuntimeError: Cannot close a running event loop 

每隔一行似乎运行良好,但是如果没有最后一行,它就不会连接到服务器,这使得它毫无用处。

注意:我在这里看到了这个问题,但是OP的解决方案似乎不适用于我的情况。

(Spyder 维护者在这里( 要在控制台中运行异步代码,您首先需要安装 nest_asyncio 包,然后在运行任何代码之前调用它,如其自述文件中所述。

我在尝试在Jupyter Notebook上运行 Discord 示例时遇到了同样的问题。转向纯python脚本为我解决了这个问题。

最新更新