この架空のPython関数について考えてみましょう。
def f(s):
# accepts a string containing placeholders
# returns an interpolated string
return s % {'foo': 'OK', 'bar': 'OK'}
文字列sがすべての期待されるプレースホルダーを提供していることを確認し、提供していない場合は、関数に欠落しているキーを丁寧に表示させるにはどうすればよいですか?
私の解決策は次のとおりです。私の質問:より良い解決策はありますか?
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'}