¿Cómo puedo escapar selectivamente del porcentaje (%) en cadenas de Python?

Resuelto jondykeman asked hace 12 años • 6 respuestas

Tengo el siguiente código

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

print(selectiveEscape)

Me gustaría obtener el resultado:

Print percent % in sentence and not have it break.

Lo que realmente sucede:

    selectiveEscape = "Use percent % in sentence and not %s" % test
TypeError: %d format: a number is required, not str
jondykeman avatar May 21 '12 07:05 jondykeman
Aceptado
>>> test = "have it break."
>>> selectiveEscape = "Print percent %% in sentence and not %s" % test
>>> print selectiveEscape
Print percent % in sentence and not have it break.
Nolen Royalty avatar May 21 '2012 00:05 Nolen Royalty

Alternativamente, a partir de Python 2.6, puedes usar un nuevo formato de cadena (descrito en PEP 3101 ):

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

lo cual es especialmente útil a medida que las cuerdas se vuelven más complicadas.

Karmel avatar May 21 '2012 00:05 Karmel

Intente usarlo %%para imprimir el signo %.

openmeet123 avatar May 21 '2012 07:05 openmeet123

No se puede escapar selectivamente %, ya que %siempre tiene un significado especial dependiendo del siguiente carácter.

En la documentación de Python, en la parte inferior de la segunda tabla de esa sección, dice:

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

Por lo tanto deberías utilizar:

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

(tenga en cuenta el cambio explícito a tupla como argumento para %)

Sin saber lo anterior, habría hecho:

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

con los conocimientos que obviamente ya tenías.

Anthon avatar Nov 27 '2016 12:11 Anthon