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

Python使用Format拼接字符串遇KeyError,如何动态生成Payload?

解决Payload动态数据添加的KeyError问题

哦,这个问题我之前也碰到过!你遇到的KeyError是因为str.format()的解析规则在搞事情——它会把字符串里所有的{}都当成占位符来处理,而你写的JSON模板里的外层大括号没有转义,所以它误以为{ "name":...里的{是某个占位符的开头,找不到对应的键就报错了。而静态字符串没用到format(),Python不会去解析里面的大括号,所以能正常运行。

下面给你几个靠谱的解决方案:

方法1:转义JSON模板里的大括号

把JSON结构里的每个{换成{{,每个}换成}},这样format()会把双大括号解析成单个大括号,只替换你指定的{0}、{1}占位符:

payload = "{{\n \"name\": \"{0}\",\n \"id\":\"{1}\"\n}}".format(1,2)

运行后生成的结果就是正确的JSON字符串:

{
 "name": "1",
 "id":"2"
}

方法2:用json模块生成推荐!

手动拼接JSON字符串很容易出错,尤其是处理复杂数据或者特殊字符的时候,用Python内置的json模块才是正道:

import json

# 先构造Python字典
data = {
    "name": 1,
    "id": 2
}
# 把字典转成格式化后的JSON字符串
payload = json.dumps(data, indent=2)

这种方法不仅不用处理任何转义问题,还能自动保证JSON格式的正确性,比如值里有引号、换行符的时候,会自动帮你转义,非常省心。

方法3:用f-string(Python3.6+)

如果你的Python版本支持f-string,也可以用这种更简洁的写法,同样需要转义大括号:

name = 1
id_val = 2  # 注意不要用id当变量名,它是Python内置关键字
payload = f"{{\n \"name\": \"{name}\",\n \"id\":\"{id_val}\"\n}}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:00:59