以下代码:

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%

两个连续的符号被解释为文字,因此在您的版本中,您有一个文字,一个文字 s ,然后是一个单独的,它需要一个格式说明符。您需要将每个文字加倍,以免被解释为格式字符串,因此您需要 %%% s %% :literal %s 表示字符串,文字

其他提示

你需要加倍百分号以逃避它:

>>> '%%%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会做你做的事情想。在格式字符串中,两个百分比会导致输出中的百分比。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top