web-dev-qa-db-fra.com

Comment puis-je échapper sélectivement au pourcentage (%) dans les chaînes Python?

J'ai le code suivant

test = "have it break."
selectiveEscape = "Print percent % in sentence and not %s" % test

print(selectiveEscape)

Je voudrais obtenir le résultat:

Print percent % in sentence and not have it break.

Qu'est-ce qui se passe réellement:

    selectiveEscape = "Use percent % in sentence and not %s" % test
TypeError: %d format: a number is required, not str
321
jondykeman
>>> test = "have it break."
>>> selectiveEscape = "Print percent %% in sentence and not %s" % test
>>> print selectiveEscape
Print percent % in sentence and not have it break.
561
Nolen Royalty

Sinon, à partir de Python 2.6, vous pouvez utiliser un nouveau formatage de chaîne (décrit dans PEP 3101 ):

'Print percent % in sentence and not {0}'.format(test)

ce qui est particulièrement pratique car vos cordes deviennent plus compliquées.

53
Karmel

essayez d’utiliser %% pour imprimer le signe%.

34
openmeet123

Vous ne pouvez pas échapper sélectivement à %, car % a toujours une signification particulière en fonction du caractère suivant.

Dans le documentation de Python, au bas du deuxième tableau de cette section, il est indiqué:

'%'        No argument is converted, results in a '%' character in the result.

Par conséquent, vous devriez utiliser:

selectiveEscape = "Print percent %% in sentence and not %s" % (test, )

(veuillez noter le changement explicite de Tuple en tant qu'argument pour %)

Sans savoir ce qui précède, j'aurais fait:

selectiveEscape = "Print percent %s in sentence and not %s" % ('%', test)

avec les connaissances que vous avez évidemment déjà eues.

5
Anthon

Si le modèle de formatage a été lu à partir d'un fichier et que vous ne pouvez pas vous assurer que le contenu double le signe de pourcentage, vous devez probablement détecter le caractère de pourcentage et décider par programme s'il s'agit du début d'un espace réservé. Ensuite, l'analyseur devrait également reconnaître des séquences telles que %d (et d'autres lettres utilisables), mais aussi %(xxx)s etc.

Un problème similaire peut être observé avec les nouveaux formats - le texte peut contenir des accolades.

3
pepr