python字符串替换为%character/**kwargs古怪

Wel*_*lls 5 python string-formatting

以下代码:

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

引发以下异常:

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

该字符串的格式如下:

http://www.blah.com?id=%PLAYER_ID%
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Ada*_*eld 15

你可能想要格式字符串%%%s%%而不是%%s%.

两个连续的%符号被解释为文字%,所以在你的版本中,你有一个文字%,一个文字s,然后一个单独的%,它期待一个格式说明符.您需要将每个文字加倍%以不被解释为格式字符串,因此您需要%%%s%%:literal %,%sfor string,literal %.