¿Cómo puedo imprimir caracteres literales en formato de rizo en una cadena de python y también usar .format en él?

x = " \{ Hello \} {0} " print x.format(42) 

me da: Key Error: Hello\\

Quiero imprimir la salida: {Hello} 42

Necesitas doblar el {{ y }} :

 >>> x = " {{ Hello }} {0} " >>> print x.format(42) ' { Hello } 42 ' 

Aquí está la parte relevante de la documentación de Python para la syntax de cadenas de formato :

Las cadenas de formato contienen “campos de reemplazo” rodeados por llaves {} . Cualquier cosa que no esté contenida entre llaves se considera texto literal, que se copia sin cambios a la salida. Si necesita incluir un carácter de refuerzo en el texto literal, se puede escapar duplicando: {{ y }} .

Se te escapa doblando los tirantes.

P.ej:

 x = "{{ Hello }} {0}" print x.format(42) 

El OP escribió este comentario:

 I was trying to format a small JSON for some purposes, like this: '{"all": false, "selected": "{}"}'.format(data) to get something like {"all": false, "selected": "1,2"} 

Es bastante común que surja el problema de “llaves de escape” cuando se trata de JSON.

Sugiero hacer esto:

 import json data = "1,2" mydict = {"all": "false", "selected": data} json.dumps(mydict) 

Es más limpio que la alternativa, que es:

 '{{"all": false, "selected": "{}"}}'.format(data) 

Usar la biblioteca json es definitivamente preferible cuando la cadena JSON se complica más que el ejemplo.

Intenta hacer esto:

 x = " {{ Hello }} {0} " print x.format(42) 

Prueba esto:

x = "{{ Hello }} {0}"

Python 3.6+ (2017)

En las versiones recientes de Python, se usarían f-strings (ver también PEP498 ).

Con f-strings se debe usar el doble {{ o }}

 n = 42 print(f" {{Hello}} {n} ") 

produce lo deseado

  {Hello} 42 

Si necesita resolver una expresión entre corchetes en lugar de usar texto literal, necesitará tres conjuntos de corchetes:

 hello = "HELLO" print(f"{{{hello.lower()}}}") 

produce

 {hello} 

Aunque no es mejor, solo para la referencia, también puede hacer esto:

 >>> x = '{}Hello{} {}' >>> print x.format('{','}',42) {Hello} 42 

Puede ser útil, por ejemplo, cuando alguien quiere imprimir {argument} . Es quizás más legible que '{{{}}}'.format('argument')

Tenga en cuenta que omite posiciones de argumento (por ejemplo, {} lugar de {0} ) después de Python 2.7

Si va a hacer esto mucho, podría ser bueno definir una función de utilidad que le permita usar sustitutos de llaves arbitrarios, como

 def custom_format(string, brackets, *args, **kwargs): if len(brackets) != 2: raise ValueError('Expected two brackets. Got {}.'.format(len(brackets))) padded = string.replace('{', '{{').replace('}', '}}') substituted = padded.replace(brackets[0], '{').replace(brackets[1], '}') formatted = substituted.format(*args, **kwargs) return formatted >>> custom_format('{{[cmd]} process 1}', brackets='[]', cmd='firefox.exe') '{{firefox.exe} process 1}' 

Tenga en cuenta que esto funcionará ya sea que los corchetes sean una cadena de longitud 2 o un iterable de dos cadenas (para delimitadores de múltiples caracteres).

La razón es, {} es la syntax de .format() por lo que en su caso .format() no reconoce {Hello} por lo que arrojó un error.

puede anularlo utilizando llaves dobles {{}},

 x = " {{ Hello }} {0} " 

o

intente %s para el formato de texto,

 x = " { Hello } %s" print x%(42)