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
相关产品推荐
相关产品推荐

