47 votes

ValueError : caractère de format non pris en charge lors de la formation de chaînes

Cela marche:

 print "Hello World%s" %"!"

Mais ce n'est pas

 print "Hello%20World%s" %"!"

l'erreur est ValueError: unsupported format character 'W' (0x57) at index 8

J'utilise Python 2.7.

Pourquoi ferais-je ça ? Eh bien, %20 est utilisé à la place des espaces dans les URL, et si vous l'utilisez, je ne peux pas former de chaînes avec les formats printf. Mais pourquoi Python fait-il cela ?

74voto

jgritty Points 4179

Vous pourriez échapper au % dans %20 comme ceci :

 print "Hello%%20World%s" %"!"

ou vous pouvez essayer d'utiliser les routines de formatage de chaîne à la place, comme :

 print "Hello%20World{0}".format("!")

http://docs.python.org/library/string.html#formatstrings

16voto

dm03514 Points 20748

Vous pourriez échapper au % avec un autre % donc %%20

Il s'agit d'une question pertinente similaire au formatage de la chaîne Python lorsque la chaîne contient "%s" sans échapper

7voto

Alan Viars Points 311

Vous avez peut-être une faute de frappe. Dans mon cas, je disais %w où je voulais dire %s.

6voto

NuclearPeon Points 547

J'utilisais l'interpolation python et j'ai oublié le caractère de fin s :

 a = dict(foo='bar')
print("What comes after foo? %(foo)" % a) # Should be %(foo)s

Regardez ces fautes de frappe.

4voto

nosklo Points 75862

Eh bien, pourquoi avez-vous %20 échappements entre guillemets d'url dans une chaîne de formatage en premier lieu ? Idéalement, vous feriez d'abord le formatage d'interpolation :

 formatting_template = 'Hello World%s'
text = '!'
full_string = formatting_template % text

Ensuite, vous l'url citez après :

 result = urllib.quote(full_string)

C'est mieux car cela citerait toutes les choses pouvant être citées par URL dans votre chaîne, y compris celles qui se trouvent dans la partie text .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X