discord.py默认隐藏哪些错误?1.7.3版本为何未吞掉ValueError
discord.py 1.7.3未配置logging仍输出错误的原因及吞错范围解析
为什么1.7.3未配置logging仍能输出错误?
在discord.py 1.7.x版本中,事件回调(比如on_ready)的异常处理逻辑并没有完全依赖logging模块:
当事件回调抛出异常时,框架的_run_event方法捕获异常后,会先判断对应的日志器是否有有效的输出处理器。如果用户未配置logging,框架会降级使用traceback.print_exc()直接将异常回溯打印到控制台,而非完全隐藏。
你测试的on_ready事件属于核心事件回调,触发的异常会走这个降级逻辑,所以能看到ValueError的输出。
1.7.3版本会吞掉哪些错误?
官方文档提到的"隐藏错误"主要针对以下几类场景:
- 库内部的警告信息:比如未正确配置intents、API调用的非致命警告、弃用提示等,这些信息默认不会输出,必须配置logging才能捕获。
- 后台异步任务的异常:通过
client.loop.create_task启动的独立异步任务,如果抛出异常且未自行捕获,框架不会主动输出任何错误信息,这类异常只能通过配置logging才能被记录。 - 网关连接的非致命错误:比如短暂的重连尝试、心跳超时警告、连接中断的非致命提示等,默认不会显示,需要logging才能查看。
- 命令框架的部分错误:使用
discord.ext.commands.Bot时,命令执行的参数解析错误、权限不足提示、未处理的命令异常等,若未配置logging或自定义错误处理,部分信息会被吞掉。
版本差异对比
1.7.3版本未配置logging的输出
Traceback (most recent call last): File ".../discord/client.py", line 343, in _run_event await coro(*args, **kwargs) File "main.py", line 8, in on_ready raise ValueError ValueError
2.0版本默认配置logging的输出
[2022-07-15 12:28:40] [INFO ] discord.client: logging in using static token [2022-07-15 12:28:41] [INFO ] discord.gateway: Shard ID None has sent the IDENTIFY payload. [2022-07-15 12:28:41] [INFO ] discord.gateway: Shard ID None has connected to Gateway (Session ID: ...). [2022-07-15 12:28:43] [ERROR ] discord.client: Ignoring exception in on_ready # ^-----------------^ 这些行来自logging模块 Traceback (most recent call last): File "C:\Users\TheFu\PycharmProjects\mcve2.0\venv\lib\site-packages\discord\client.py", line 456, in _run_event await coro(*args, **kwargs) File "C:\Users\TheFu\PycharmProjects\mcve2.0\main.py", line 8, in on_ready raise ValueError ValueError
内容的提问来源于stack exchange,提问作者TheFungusAmongUs
相关产品推荐
相关产品推荐

