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

Python使用带字面量大括号的format字符串触发KeyError报错

报错触发原因

Python内置str.format()方法会将字符串内的单个大括号{、}识别为占位符边界:

  • {0}、{1}这类写法是位置占位符,按顺序匹配传入的位置参数
  • {key}这类写法是命名占位符,会匹配传入的关键字参数对应键名
    原代码中用于包裹JSON结构的字面量大括号未做转义,均为单个书写。format执行时,会从第一个{开始向后匹配对应的},将中间的整段内容\r\n "Code"识别为命名占位符的键名,由于调用format时未传入对应该键名的参数,直接触发KeyError。
修复方案

方案1:转义字面量大括号

str.format()语法规定,若要输出作为普通字符的大括号,需要将大括号双写完成转义:{写为{{,}写为}},修改后代码如下:

Code = "00000"
Number = "111-111-1111"
output = "{{\r\n      \"Code\":\"{0}\",\r\n    \"PhNumber\": \"{1}\"\r\n}}".format(Code, Number)
print(output)

运行后可输出预期格式的内容。

方案2(推荐):使用标准库json模块序列化

手动拼接JSON字符串极易出现大括号转义、特殊字符转义错误,更稳妥的方式是使用Python标准库json模块:先构造对应结构的字典,再序列化为JSON字符串,无需手动处理任何格式转义,还可通过indent参数直接控制缩进排版:

import json

Code = "00000"
Number = "111-111-1111"
data = {
    "Code": Code,
    "PhNumber": Number
}
# indent参数设置缩进空格数,可匹配预期排版效果
output = json.dumps(data, indent=4)
print(output)

该写法鲁棒性更强,后续即使字段值包含引号、换行、特殊符号,也不会生成非法格式的JSON内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:18:19