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

Tengo el siguiente código

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

Me gustaría obtener la salida:

 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 

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

Como alternativa, a partir de Python 2.6, puede usar el nuevo formato de cadena (descrito en PEP 3101 ):

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

que es especialmente útil ya que sus cuerdas se vuelven más complicadas.

intente usar %% para imprimir el signo%.

No puede escapar de forma selectiva % , ya que % siempre tiene un significado especial según el siguiente carácter.

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

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

Por lo tanto debes usar:

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

(tenga en cuenta el cambio expicit a tupla como argumento a % )

Sin saber lo anterior, habría hecho:

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

Con el conocimiento que obviamente ya tenías.

Si se leyó la plantilla de formato de un archivo y no puede asegurarse de que el contenido duplique el signo de porcentaje, entonces probablemente tenga que detectar el carácter de porcentaje y decidir mediante progtwigción si es el comienzo de un marcador de posición o no. Luego, el analizador también debe reconocer secuencias como %d (y otras letras que pueden usarse), pero también %(xxx)s etc.

Se puede observar un problema similar con los nuevos formatos: el texto puede contener llaves.

He intentado diferentes métodos para imprimir un título de subttwig, mira cómo funcionan. Es diferente cuando uso Latex.

Funciona con ‘%%’ y ‘string’ + ‘%’ en un caso típico.

Si usas Latex, funcionó usando ‘string’ + ‘\%’

Así que en un caso típico:

 import matplotlib.pyplot as plt fig,ax = plt.subplots(4,1) float_number = 4.17 ax[0].set_title('Total: (%1.2f' %float_number + '\%)') ax[1].set_title('Total: (%1.2f%%)' %float_number) ax[2].set_title('Total: (%1.2f' %float_number + '%%)') ax[3].set_title('Total: (%1.2f' %float_number + '%)') 

Ejemplos de títulos con%

Si utilizamos látex:

 import matplotlib.pyplot as plt import matplotlib font = {'family' : 'normal', 'weight' : 'bold', 'size' : 12} matplotlib.rc('font', **font) matplotlib.rcParams['text.usetex'] = True matplotlib.rcParams['text.latex.unicode'] = True fig,ax = plt.subplots(4,1) float_number = 4.17 #ax[0].set_title('Total: (%1.2f\%)' %float_number) This makes python crash ax[1].set_title('Total: (%1.2f%%)' %float_number) ax[2].set_title('Total: (%1.2f' %float_number + '%%)') ax[3].set_title('Total: (%1.2f' %float_number + '\%)') 

Obtenemos esto: Ejemplo de título con% y látex