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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:45:00