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
相关产品推荐
相关产品推荐

