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

Python 2.6中使用.format()方法时出现KeyError问题求助

解决字符串格式化时的KeyError问题

我来帮你捋清楚这个错误的原因,以及怎么修复它:

问题根源

你现在的代码流程是先把字典转成JSON字符串,再调用format(),但这会触发Python字符串格式化的误解:

  • 当你执行json.dumps(data)后,原来的字典值'{0}'会被转换成JSON格式的字符串'"{0}"',最终生成的JSON字符串看起来是这样的:
    {"u_in_record_type": "{0}", "u_company_source": "{1}"}
    
  • Python的str.format()方法会把JSON里的{"u_in_record_type": ...}中的{u_in_record_type}当成命名占位符,试图去查找名为"u_in_record_type"的参数,可你只传了type和source,自然就抛出KeyError了。

另外还要注意:别用type作为变量名,它是Python的内置函数,这样命名会覆盖内置功能,容易引发其他问题。

修复方案

最合理的做法是先完成字符串格式化,再把字典转成JSON,这样就能避免格式冲突:

import json
# 换个变量名,避免覆盖内置函数type
record_type = "Test"
company_source = "Test"

# 先替换占位符,再生成JSON
data = { 
    "u_in_record_type": '{0}'.format(record_type), 
    "u_company_source": '{1}'.format(company_source) 
}
data_json = json.dumps(data)
print(data_json)

如果你一定要先转成JSON再格式化(这种场景很少见),需要把JSON结构里的{}转义成{{}},这样format()就不会把它们当成占位符了:

import json
record_type = "Test"
company_source = "Test"

# 先把字典里的占位符保留,把JSON结构的{}转义
data = { 
    "u_in_record_type": '{0}', 
    "u_company_source": '{1}' 
}
# 转成JSON后,把{}替换成{{}},只保留{0}{1}作为占位符
data_json = json.dumps(data).replace("{", "{{").replace("}", "}}").replace("{{0}}", "{0}").replace("{{1}}", "{1}")
print(data_json.format(record_type, company_source))

显然第一种方案更简洁易维护,优先推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:39:51