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

discord.py嵌入填入JSON数据时出现%运算符类型错误如何修复

错误原因

报错的核心问题是字符串格式化运算符%的位置放置错误:
embed.add_field()方法执行后返回的是Embed对象本身,你将%写在了add_field()的括号外侧,相当于直接用Embed对象和接口返回的余额字符串做%运算,这一操作本身就不被支持。
你原本的需求是给value参数传入的'%s coins'字符串做格式化,因此%运算符需要放在该字符串的后方,所有格式化逻辑需要包含在value参数的赋值范围内。


修复后的代码

@client.event
async def on_message(message):
    # 建议先过滤机器人自身消息,避免触发死循环
    if message.author.bot:
        return
    if message.content.startswith('!hello'):
        embed = discord.Embed(title="Verium Mining", url="https://wiki.vericoin.info/images/thumb/b/b5/Verium-01.png/176px-Verium-01.png", color=0x5da3fd)
        # 先单独提取余额数据,逻辑更清晰
        res = requests.get('https://vrm.mining-pool.ovh/index.php?page=api&action=getuserbalance&api_key=90ccec2fe5216ee73f6143ab3f59804d914a0df65165bedddd6f7a78fb6ffd15&id=4483')
        balance = json.loads(res.text)['getuserbalance']['data']['confirmed']
        # 修正:格式化逻辑放在value参数内部
        embed.add_field(name="Balance", value='%s coins' % balance, inline=False)
        embed.add_field(name="Hashrate", value="undefined", inline=False)
        embed.add_field(name="Sharerate", value="undefined", inline=False)
        embed.set_footer(text="undefined")
        # 补充缺失的发送embed逻辑
        await message.channel.send(embed=embed)

可选优化

  1. 字符串格式化可以换用可读性更高的f-string写法:value=f"{balance} coins"
  2. 不要在discord.py的异步事件中直接使用同步的requests库,会阻塞整个机器人的事件循环,建议替换为异步请求库aiohttp。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:24:06