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

Discord 如何处理连接丢失错误?discord.py中断连异常的捕获方法

解决方案

首先你需要先导入对应异常类,再根据你的代码场景选择捕获方式:

  • 导入依赖
import socket
from aiohttp import ClientConnectorError

场景1:在自定义事件逻辑(如on_message)中捕获

如果报错是触发自你自己写的事件逻辑内的请求操作,直接在对应逻辑外层套try-except即可:

@bot.event
async def on_message(message):
    # 跳过机器人自身的消息
    if message.author == bot.user:
        return
    
    try:
        # 此处放置你原来的业务逻辑,例如发送消息、调用外部API等
        await message.channel.send("测试回复内容")
    except (socket.gaierror, ClientConnectorError) as e:
        # 自定义断连后的处理逻辑,例如记录日志、跳过当前操作等
        print(f"网络连接失败,错误信息:{str(e)}")
        # discord.py自带自动重连机制,无需手动实现重连逻辑

场景2:全局捕获底层连接报错

如果报错是discord.py底层发起连接时触发,没有被你的业务代码捕获,可以使用全局错误处理器统一处理:

@bot.event
async def on_error(event, *args, **kwargs):
    import sys
    exc_type, exc_obj, _ = sys.exc_info()
    # 判断是否为断连相关的网络异常
    if exc_type in (socket.gaierror, ClientConnectorError):
        print(f"全局捕获网络连接异常:{str(exc_obj)}")
        # 此处可添加自定义处理逻辑,例如上报错误、记录日志
    else:
        # 其他类型异常按默认逻辑抛出
        raise

注意:discord.py内置了自动重连逻辑,捕获异常后不需要手动写重连代码,仅需要处理你需要的兜底操作即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:36:02