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

Python使用format()函数格式化字符串时触发KeyError的问题排查

Python format()函数触发KeyError的原因及解决办法

问题描述

使用Python的format()函数格式化字符串时触发KeyError,直接拼接字符串的方式可正常运行,但format写法报错,相关代码及输出如下:

示例代码

servoid     = "test1"
parameter   = "test2"
value       = "test3"

# message = '{"servoid":"{}","parameter":"{}","value":"{}"}'.format(servoid,parameter,value) # <-- 触发KeyError
message = '{"servoid":"'+servoid+'","parameter":"'+parameter+'","value":"'+value+'"}'      # <-- 运行正常

print(message)

正常运行输出

{"servoid":"test1","parameter":"test2","value":"test3"}

报错输出

Traceback (most recent call last):
  File "c:\Users\sknippels\Documents\machine_software\mqtt_test\TestEAL_EFC.py", line 126, in <module>
    message = '{"servoid":"{}","parameter":"{}","value":"{}"}'.format(servoid,parameter,value) # <-- key error
KeyError: '"servoid"'

原因及解决办法

问题出在字符串中的大括号:format()函数会把字符串内的{}识别为占位符,你写的{"servoid":...}里的{servoid}会被函数误认为是要替换的关键字参数名,但调用format()时传入的是位置参数,找不到对应键,因此抛出KeyError。

解决方法是将字符串中需要保留的普通大括号用双大括号{{}}转义,这样format()会将其当作普通字符处理,不会解析为占位符。

修正后的代码:

servoid     = "test1"
parameter   = "test2"
value       = "test3"

message = '{{"servoid":"{}","parameter":"{}","value":"{}"}}'.format(servoid,parameter,value)
print(message)

运行后即可得到与拼接方式一致的正确输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:37:21