Python生成C代码时打印含大括号字符串引发KeyError的解决方法
解决Python生成C代码时的大括号转义问题
嘿,这个问题我太熟啦!你遇到的KeyError完全是因为Python的字符串格式化机制在搞鬼——str.format()会把单个的{}识别成需要替换的占位符,但你那些包裹.data1、.data2的大括号是要原样输出到C代码里的,所以得给它们做个“标记”,告诉格式化函数别把它们当成占位符处理。
核心解决思路:用双大括号转义
要让format()保留单个大括号,只需要把你想原样输出的{写成{{,}写成}}就行,真正用来替换变量的占位符还是用单个{}。
修正后的函数示例
方式1:位置参数格式化
def funky(data1, data2): return """{{ .data1="{0}", .data2="{1}", }},""".format(data1, data2)
方式2:命名参数格式化(更易读)
如果参数多的话,用命名占位符会更清晰,不容易搞混顺序:
def funky(data1, data2): return """{{ .data1="{data_val1}", .data2="{data_val2}", }},""".format( data_val1=data1, data_val2=data2 )
方式3:Python 3.6+ 用f-string(更简洁)
要是你的Python版本够新,用f-string会更直观,转义规则一样,双大括号保留原样:
def funky(data1, data2): return f'{{ .data1="{data1}", .data2="{data2}", }},'
现在调用funky("egg","dog"),就会完美返回你想要的结果:{ .data1="egg", .data2="dog", },
内容的提问来源于stack exchange,提问作者Hefaestion
相关产品推荐
相关产品推荐

