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

Python三引号字符串添加变量时触发KeyError的问题分析与解决

Python字符串格式化出现KeyError: '\n "query"'的原因与修复方案

嘿,我来帮你搞定这个问题!你碰到的这个KeyError是Python字符串格式化时的典型坑,咱们一步步拆解清楚:

问题成因

你用的str.format()方法会把字符串里所有的{}都视为占位符,需要对应位置或关键字的参数来替换。但你在多行字符串里写的JSON格式内容(比如{ "query": ... })里的大括号,也被format()当成了要替换的占位符——而你并没有为这些额外的大括号提供对应的参数,所以Python找不到匹配的键,就抛出了KeyError: '\n "query"'(错误信息里的内容是它识别到的占位符开头后的部分)。

简单说:你只想让{0}、{1}、{2}被替换,但其他的{}也被误判成了占位符,导致报错。

修复方案

解决方法很直接:把字符串里不需要被format替换的大括号都改成双大括号{{}},这样str.format()会自动把双大括号解析成单个大括号,而你定义的{0}、{1}、{2}依然会正常替换。

修改后的代码

configuration_str= """ configuration={{ "query": {{ "query": "CALL `{0}.{1}.{2}`(); ", "useLegacySql": False, }} }}, """.format("server_name", "dataset_name", "sp_name")

验证效果

运行这段代码后,你会得到正确的格式化结果:

configuration={ "query": { "query": "CALL `server_name.dataset_name.sp_name`(); ", "useLegacySql": False, } }, 

如果你用的是Python 3.6+,也可以用更直观的f-string实现(同样需要转义大括号):

server_name = "server_name"
dataset_name = "dataset_name"
sp_name = "sp_name"
configuration_str= f""" configuration={{ "query": {{ "query": "CALL `{server_name}.{dataset_name}.{sp_name}`(); ", "useLegacySql": False, }} }}, """

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:47:48