You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter运行Discord bot报RuntimeError: Cannot close a running event loop求助

问题解决方案

第一步:修复前置逻辑错误

你遇到的RuntimeError属于报错链的最后一环,首先要先解决更早出现的登录错误:

  • 你没有调用load_dotenv(),无法读取.env文件内的配置项,os.getenv("token")会返回空值
  • 你调用client.run()时传的是字符串'TOKEN',不是你读取到的TOKEN变量
  • on_message事件中message.user属于属性错误,该对象不存在user属性,应该判断是否为机器人自身的账号:if message.author == client.user:

第二步:解决Jupyter环境事件循环冲突

Jupyter本身会常驻一个运行中的asyncio事件循环,discord.py v1.7.3版本的client.run()方法在执行结束(无论成功还是报错)时会强制尝试关闭当前事件循环,就会触发你遇到的报错。你可以改用手动启动逻辑,跳过自动清理循环的步骤,修改后的完整代码如下:

import asyncio
import nest_asyncio
nest_asyncio.apply()

import discord
import os
from dotenv import load_dotenv

# 加载.env文件配置
load_dotenv()

client = discord.Client()

@client.event
async def on_ready():
    print('Logged in as {0.user}'.format(client))
    
@client.event
async def on_message(message):
    # 忽略机器人自己发送的消息
    if message.author == client.user:
        return
    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')
        
# 读取.env中的token值
TOKEN = os.getenv("token")

# 替换默认的run方法,手动启动避免关闭循环
loop = asyncio.get_event_loop()
loop.create_task(client.start(TOKEN))

如果需要停止运行的机器人,执行await client.close()即可,不需要关闭事件循环。

内容的提问来源于stack exchange,提问作者ASIM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:27:02