Comment puis-je sélectivement échapper pourcentage (%) en Python cordes?
J'ai le code suivant
test = "have it break."
selectiveEscape = "Print percent % in sentence and not %s" % test
print(selectiveEscape)
Je voudrais obtenir la sortie:
Print percent % in sentence and not have it break.
Ce qui se passe réellement:
selectiveEscape = "Use percent % in sentence and not %s" % test
TypeError: %d format: a number is required, not str
- Mais j'ai personnellement rencontré le problème lors de la mise en forme du modèle a été lu à partir d'un fichier. Si vous n'avez aucun contrôle sur ce qui est à l'intérieur du fichier, la question est légitime.
- Si la mise en forme du modèle est dans un fichier, puis le modèle est - il correct, y compris la bonne échapper de
%
symboles - est de la responsabilité du créateur du fichier. - Pourquoi n'est-il pas
\%
? C'était ma deviner, je suis surpris de trouver que c'est%%
au lieu - semble assez contre-intuitif. % i
signifie "une représentation décimale d'un nombre entier, collier de gauche avec des espaces.- L'évasion est à la fonction, pas la syntaxe de la langue. Par conséquent, si l'évasion a été
\%
il serait effectivement\\%
lorsqu'il est écrit en code ordinaire.<escape><escape>
est le type de modèle que j'ai vu, et\
se trouve être le plus commun, caractère d'échappement, pour le meilleur ou pour le pire. - et comment voulez-vous échapper à
\
si vous avez eu pour imprimer\\%
? Vous êtes lié pour exiger échapper à travers la répétition de caractères spéciaux les caractères spéciaux sont également pas en fonction des circonstances. - Je pense que c'est ennuyeux en Python que le littéral % est codée par "%%" et non par "\%".
Vous devez vous connecter pour publier un commentaire.
print('%s%%' % 100)
imprime100%
. Maisprint('%%')
imprime%%
. Il semble que vous n'avez pas à échapper à l' % signes, si vous ne pas faire des substitutions.%
méthode est en fait obsolète (en Python 3) en faveur destr.format()
: docs.python.org/2/library/stdtypes.html#str.format%
méthode n'est pas amorti en Python 3.6. Il continuera à être pris en charge en lieu et place de sa similitude avec c, c++, etc.str.format()
et f-les cordes sont préférables, mais ne les applique pas.%
signe. Juste%
feraprint "Print percent %" + "variable %s" % 'text'
comme un sale solution de contournement.Sinon, comme de la version 2.6 de Python, vous pouvez utiliser la nouvelle mise en forme de chaîne (décrit dans PEP 3101):
ce qui est particulièrement pratique car vos chaînes deviennent plus compliquées.
format
ces jours-ci.essayez d'utiliser
%%
à l'impression du signe%.Vous ne pouvez pas sélectivement échapper
%
, comme%
a toujours une signification particulière en fonction du caractère suivant.Dans le la documentation de Python, à la bottem de la deuxième table dans cet article, il déclare:
Par conséquent, vous devez utiliser:
(veuillez noter que le expicit changer pour un tuple comme argument pour
%
)Sans savoir à propos de la ci-dessus, je l'aurais fait:
avec les connaissances dont vous avez évidemment déjà eu.
Si la mise en forme du modèle a été lu à partir d'un fichier, et vous ne pouvez pas garantir que le contenu de doubler le signe de pourcentage, alors vous avez probablement pour détecter le caractère de pourcentage et de décider par programmation si c'est le début d'un espace réservé ou non. Ensuite, l'analyseur doit également reconnaître les séquences comme
%d
(et d'autres lettres qui peuvent être utilisés), mais aussi%(xxx)s
etc.Problème similaire peut être observé avec les nouveaux formats -- le texte peut contenir des accolades.
J'ai essayé différentes méthodes pour imprimer une intrigue secondaire titre, regardez comment ils fonctionnent. C'est différent quand j'utilise Latex.
Il fonctionne avec '%%' et 'string'+'%' dans un cas typique.
Si vous utilisez Latex, il a travaillé à l'aide de 'string'+'\%'
Donc dans un cas typique:
Titre d'exemples avec %
Si l'on utilise latex:
Nous obtenons ceci:
Titre exemple avec % de latex et de