2

この架空の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'}
4

1 に答える 1

3

_formatter_parserメソッドを使用して、指定されたすべてのプレースホルダーを表示する方法があります。

>>>> y="A %{foo} is a %{bar}"

>>>> for a,b,c,d in y._formatter_parser(): print b

foo

bar

「公開」方法の場合:

>>>> import string
>>>> x = string.Formatter()
>>>> elements = x.parse(y)
>>>> for a,b,c,d in elements: print b
于 2011-01-30T03:54:46.317 に答える