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