質問

次のコード:

def __init__(self, url, **kwargs):
    for key in kwargs.keys():
        url = url.replace('%%s%' % key, str(kwargs[key]))

次の例外をスローします。

File "/home/wells/py-mlb/lib/fetcher.py", line 25, in __init__
url = url.replace('%%s%' % key, str(kwargs[key]))
ValueError: incomplete format

文字列の形式は次のとおりです。

http://www.blah.com?id=%PLAYER_ID%

何が間違っているのですか?

役に立ちましたか?

解決

%% s%ではなく、フォーマット文字列 %%% s %% が必要な場合があります。

2つの連続した記号はリテラルとして解釈されるため、ご使用のバージョンでは、リテラル、リテラル s 、そして単独ので、その後にフォーマット指定子が必要です。書式文字列として解釈されないように、各リテラルを2倍にする必要があるため、 %%% s %% :リテラルが必要です。 、文字列用の%s 、リテラル

他のヒント

エスケープするにはパーセント記号を2倍にする必要があります:

>>> '%%%s%%' % 'PLAYER_ID'
'%PLAYER_ID%'

ディクショナリを反復処理するときに、次のようにforステートメントで値をアンパックすることもできます。

def __init__(self, url, **kwargs):
    for key, value in kwargs.items():
        url = url.replace('%%%s%%' % key, str(value))

アダムはほぼ正しかった。コードを次のように変更します。

def __init__(self, url, **kwargs):
    for key in kwargs.keys():
        url = url.replace('%%%s%%' % key, str(kwargs[key]))

キーがFOOの場合、 '%%% s %%'%key の結果は '%FOO%' になり、url.replaceは何をしますか欲しいです。書式文字列では、2パーセントを指定すると出力がパーセントになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top