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

升级依赖后discord.py发送图片报错TypeError: 'FormData' object is not iterable

报错根因

该问题核心是discord-components库已停止维护,和最新版discord.py的FormData处理逻辑不兼容导致:

  • 新版discord.py重构了内部HTTP请求的FormData构造逻辑,原FormData为可迭代对象,新版本修改实现后不再支持直接迭代
  • 你使用的discord-components库的send方法覆盖补丁(dpy_overrides.py)仍按照旧版discord.py的逻辑编写,遍历FormData时就会抛出TypeError: 'FormData' object is not iterable错误
  • 额外说明:你现有代码中async with管理的ClientSession不需要手动调用await session.close(),上下文管理器会自动处理,该冗余代码不影响当前报错,可后续优化

修复方案(无需回退依赖版本)

方案1:替换停止维护的discord-components库

discord-components已多年未更新,当前官方discord.py已经原生支持按钮、下拉菜单等交互组件,直接移除discord-components库,改用discord.py原生的组件写法即可,完全兼容最新版discord.py,不会出现同类兼容问题。

方案2:临时修复discord-components的补丁代码

如果暂时不想修改现有组件相关的业务代码,可以手动修改/home/container/libs/discord_components/dpy_overrides.py里的send逻辑:
找到306行附近调用state.http.send_files的代码段,替换为以下兼容逻辑即可:

# 替换原来的data = await state.http.send_files(...)相关代码
files = kwargs.pop("files", [])
file = kwargs.pop("file", None)
if file is not None:
    files.append(file)
data = await state.http.send_message(channel.id, *args, files=files, **kwargs)

额外代码优化

你可以删掉冗余的session.close()调用,修改后代码如下:

url = f"https://chat.miscguild.xyz/render.png?m=custom&d={dailygexp}&t=1"
async with aiohttp.ClientSession() as session:
    async with session.get(url) as resp:
        image_data = BytesIO(await resp.read())
await ctx.send(file=discord.File(image_data, 'dailylb.jpg'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:54:04