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)
可选优化
- 字符串格式化可以换用可读性更高的f-string写法:
value=f"{balance} coins" - 不要在discord.py的异步事件中直接使用同步的
requests库,会阻塞整个机器人的事件循环,建议替换为异步请求库aiohttp。
内容的提问来源于stack exchange,提问作者jojo osinga
相关产品推荐
相关产品推荐

