2
考虑这个虚构的Python函数:检查插值字符串提供预期的占位符
def f(s):
# accepts a string containing placeholders
# returns an interpolated string
return s % {'foo': 'OK', 'bar': 'OK'}
我如何检查字符串小号提供所有预期的占位符,如果没有,使功能礼貌地显示缺少的钥匙?
我的解决方案如下。我的问题是:有更好的解决方案吗?
import sys
def f(s):
d = {}
notfound = []
expected = ['foo', 'bar']
while True:
try:
s % d
break
except KeyError as e:
key = e.args[0] # missing key
notfound.append(key)
d.update({key: None})
missing = set(expected).difference(set(notfound))
if missing:
sys.exit("missing keys: %s" % ", ".join(list(missing)))
return s % {'foo': 'OK', 'bar': 'OK'}
您应该使用str.format新码。 – 2011-01-29 20:12:44
谢谢你的提示,我一定会这样做的。虽然阅读字符串模块文档,我意识到,在我的例子中,我只需要简单的替代值,而不是转换或格式化它们,所以旧的(但不弃用)string.Template将是一个更好的选择。 – Paolo 2011-01-29 22:11:08