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

Python3格式化含{}的字符串时出现KeyError: "'class'"问题求助

为什么调用.format(N)会抛出KeyError: "'class'"?

嘿,这个问题我之前也踩过坑!咱们来一步步拆解原因和解决办法:

问题根源

当你使用字符串的.format()方法时,Python会把字符串里的**单大括号{}**当成占位符,尝试匹配你传入的参数或者关键字参数。你的原始字符串是:

'replication = {\'class\' : \'NetworkTopologyStrategy\', \'datacenter1\' : {}};'

这里面的{'class' : ...}部分,会被.format()解析成“需要替换名为'class'的参数”,但你只传了N这个参数,根本没有提供'class'对应的值,所以直接触发了KeyError。

解决办法

要保留字符串里的大括号结构,同时只替换指定的{},你需要把那些不需要被.format()替换的大括号用**双大括号{{}}**转义:

方法1:修改原始字符串的大括号

把原始字符串里的静态大括号(就是'class'周围的那些)改成双大括号,只留最后一个{}作为N的占位符:

# 转义不需要替换的大括号
template = 'replication = {{\'class\' : \'NetworkTopologyStrategy\', \'datacenter1\' : {}}};'
result = template.format(N)

这样.format()会把{{和}}解析成单个的{和},只替换最后那个单独的{}为N的值。

方法2:使用f-string(Python 3.6+推荐)

如果你的Python版本支持f-string,写法会更简洁直观,同样用双大括号转义静态部分:

result = f"replication = {{\'class\' : \'NetworkTopologyStrategy\', \'datacenter1\' : {N}}};";

效果和方法1完全一致,但代码可读性更高。

总结

.format()会把所有单大括号对视为占位符,如果你想保留字符串里的大括号结构,必须用双大括号转义,否则Python会误以为你要替换那个位置的参数,而当找不到对应参数时就会抛出KeyError。

内容的提问来源于stack exchange,提问作者przemyslaw.sagalo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:05:35