Discord.py报错discord.utils无'format_dt'属性,升级脚本循环不生效如何解决
问题根因
- 模块导入缓存:Python导入discord模块后,版本信息会缓存在当前进程内存中,即使后续通过pip安装了新版本,当前运行的脚本读取的
discord.__version__仍然是初始导入时的旧值,版本判断永远不满足,触发无限递归循环。 - 语法错误:标准Python无内置
printf函数,若你未自定义实现该函数,执行时会直接抛出异常,而你的异常捕获逻辑直接跳过后续操作,导致升级命令完全没有执行。 - 版本规则不合理:你要求版本精确等于
2.0.0a,目前discord.py官方最新稳定版已经更新到2.3以上,就算成功安装也无法匹配你的校验规则。 - 依赖冲突:你使用的
discord-components库已停止维护,且强制依赖discord.py 1.x版本,会自动阻止2.0+版本的discord.py安装。
修复方案
- 卸载冲突依赖:执行
pip uninstall discord-components discord.py -y,discord.py 2.0+已经原生支持按钮、下拉菜单等组件,无需第三方库支持。 - 调整版本判断逻辑:不要精确匹配alpha测试版本号,改为判断版本号大于等于2.0即可,
format_dt是所有2.0及以上版本都支持的功能。 - 调整模块导入顺序:先校验已安装的discord版本,符合要求后再导入discord相关模块;如果需要执行升级,升级完成后直接退出进程,提示用户重启脚本,避免运行时缓存问题。
- 修正语法错误:将
printf替换为标准print函数,或确认自定义的printf函数已提前正确定义。
修正后可用代码
import os, sys from importlib.metadata import version, PackageNotFoundError # 先校验版本,不提前导入discord避免缓存 REQUIRED_DISCORD_VER = 2.0 try: discord_ver = version("discord.py") major_ver = float(".".join(discord_ver.split(".")[:2])) except PackageNotFoundError: major_ver = 0.0 if major_ver < REQUIRED_DISCORD_VER: print('DISCORD版本过低,正在安装更新...') # 卸载冲突依赖 os.system('pip uninstall discord-components discord.py -y') os.system('pip install --upgrade pip') # 安装最新稳定版discord.py install_result = os.system('pip install -U discord.py') if install_result == 0: print(f'成功安装discord.py最新版,请重启脚本生效。') else: print('安装失败,请手动执行pip install -U discord.py安装。') # 直接退出,避免后续导入旧版本缓存 sys.exit() # 版本符合要求再导入相关模块 import discord from discord.ext import commands # 组件直接使用discord.ui下的Button、Select等原生类即可
内容的提问来源于stack exchange,提问作者David Fernández Alfageme
相关产品推荐
相关产品推荐

