Domanda

Codice seguente:

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

Genera la seguente eccezione:

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

La stringa ha un formato come:

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

Cosa sto sbagliando?

È stato utile?

Soluzione

Probabilmente vuoi la stringa di formato %%% s %% invece di %% s% .

Due segni consecutivi % vengono interpretati come un % letterale, quindi nella tua versione hai un % letterale, un s , quindi un % solitario, che si aspetta un identificatore di formato dopo di esso. Devi raddoppiare ogni % letterale per non essere interpretato come una stringa di formato, quindi vuoi %%% s %% : % letterale , % s per stringa, % letterale.

Altri suggerimenti

è necessario raddoppiare il segno di percentuale per evitarlo:

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

anche quando si scorre sul dizionario è possibile decomprimere i valori nell'istruzione for in questo modo:

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

Adam aveva quasi ragione. Cambia il tuo codice in:

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

Quando la chiave è FOO, quindi '%%% s %%'% key genera '% FOO%' e url.replace farà ciò che volere. In una stringa di formato, due percentuali generano una percentuale nell'output.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top