使用 %s 时出现不支持的操作数类型错误

Posted

技术标签:

【中文标题】使用 %s 时出现不支持的操作数类型错误【英文标题】:unsupported operand type(s) error when using %s 【发布时间】:2021-12-26 01:08:09 【问题描述】:

我正在尝试让这段代码工作,它将一些 JSON 输出传递到 discord.py 嵌入中,但我遇到了一些问题,这是我的一段代码。

@client.event
async def on_message(message):
    if message.content.startswith('!hello'):
        print("dick")
        embed = discord.Embed(title="Verium Mining", url="https://wiki.vericoin.info/images/thumb/b/b5/Verium-01.png/176px-Verium-01.png", color=0x5da3fd)
        embed.add_field(name="Balance", value='%s coins', inline=False) % (json.loads(requests.get('https://vrm.mining-pool.ovh/index.php?page=api&action=getuserbalance&api_key=90ccec2fe5216ee73f6143ab3f59804d914a0df65165bedddd6f7a78fb6ffd15&id=4483').text)['getuserbalance']['data']['confirmed'])
        embed.add_field(name="Hashrate", value="undefined", inline=False)
        embed.add_field(name="Sharerate", value="undefined", inline=False)
        embed.set_footer(text="undefined")

运行时出现以下错误:

TypeError: unsupported operand type(s) for %: 'Embed' and 'str'

我该如何解决这个问题?

提前致谢

【问题讨论】:

您的意思是将% 运算符应用于字符串文字'%s coins' 是的,所以输出是“硬币数量”硬币 那么你的意思是value='%s coins'%json.loads(...)。您将 % 运算符应用于错误的对象。如果您不尝试在一行中做这么多,您的代码会更清晰。 是的,但我将如何在代码中实现它? 【参考方案1】:

你在哪里

embed.add_field(name="Balance", value='%s coins', inline=False) % (json.loads(requests.get('https://vrm.mining-pool.ovh/index.php?page=api&action=getuserbalance&api_key=90ccec2fe5216ee73f6143ab3f59804d914a0df65165bedddd6f7a78fb6ffd15&id=4483').text)['getuserbalance']['data']['confirmed'])

你的意思是

embed.add_field(name="Balance", value='%s coins' % (json.loads(requests.get('https://vrm.mining-pool.ovh/index.php?page=api&action=getuserbalance&api_key=90ccec2fe5216ee73f6143ab3f59804d914a0df65165bedddd6f7a78fb6ffd15&id=4483').text)['getuserbalance']['data']['confirmed']), inline=False)

虽然这样写会更清楚:

num_coins = json.loads(requests.get('https://vrm.mining-pool.ovh/index.php?page=api&action=getuserbalance&api_key=90ccec2fe5216ee73f6143ab3f59804d914a0df65165bedddd6f7a78fb6ffd15&id=4483').text)['getuserbalance']['data']['confirmed']
embed.add_field(name="Balance", value='%s coins'%num_coins, inline=False)

如果您使用的是最新版本的 Python,则可以使用 f 字符串并完全避免使用 % 运算符:

num_coins = json.loads(requests.get('https://vrm.mining-pool.ovh/index.php?page=api&action=getuserbalance&api_key=90ccec2fe5216ee73f6143ab3f59804d914a0df65165bedddd6f7a78fb6ffd15&id=4483').text)['getuserbalance']['data']['confirmed']
embed.add_field(name="Balance", value=f'num_coins coins', inline=False)

【讨论】:

以上是关于使用 %s 时出现不支持的操作数类型错误的主要内容,如果未能解决你的问题,请参考以下文章

pip install virtualenv 和 virtualenvwrapper 时出现不支持的语言环境设置错误

codeblocks调试时出现不支持16位应用程序的提示,但编译时没有出现错误?

将 std::vector 与结构一起使用时出现不完整的类型错误

尝试子查询时出现不明确的列名错误

从引用游标中获取批量收集时出现不一致的数据类型错误

注册 UDF 时出现 Spark 错误:不支持 AnyRef 类型的架构