x = " \{ Hello \} {0} "
print(x.format(42))
me dá: Key Error: Hello\\
Quero imprimir a saída: {Hello} 42
python
string
format
string-formatting
curly-braces
Schitti
fonte
fonte
{{ }}
), usestring.Template
. Lá você substitui os identificadores do formulário$foo
(útil para gerar o código LaTeX).Respostas:
Você precisa dobrar o
{{
e}}
:Aqui está a parte relevante da documentação do Python para a sintaxe da string de formato :
fonte
"{{{0}}}".format(42)
!"{ something { } {value}".format(42)
não funciona{0}
significa isso?{0}
refere-se ao primeiro argumento para.format()
. Você pode imprimir mais de um valor{0} {1} {2}
, desde que dê o mesmo número de argumentos.format()
. Veja docs.python.org/library/string.html#format-examples para exemplos extensos.Você foge dobrando o aparelho.
Por exemplo:
fonte
Python 3.6+ (2017)
Nas versões recentes do Python, usaria -se strings-f (veja também PEP498 ).
Com as cordas f, deve-se usar o dobro
{{
ou}}
produz o desejado
Se você precisar resolver uma expressão entre colchetes, em vez de usar texto literal, precisará de três conjuntos de colchetes:
produz
fonte
O OP escreveu este comentário:
É bastante comum que o problema de "escapamento de aparelho" surja ao lidar com o JSON.
Eu sugiro fazer isso:
É mais limpo que a alternativa, que é:
O uso da
json
biblioteca é definitivamente preferível quando a string JSON fica mais complicada que o exemplo.fonte
Tente fazer isso:
fonte
Tente o seguinte:
x = "{{ Hello }} {0}"
fonte
Embora não seja melhor, apenas para referência, você também pode fazer isso:
Pode ser útil, por exemplo, quando alguém deseja imprimir
{argument}
. Talvez seja mais legível do que'{{{}}}'.format('argument')
Observe que você omite as posições dos argumentos (por exemplo, em
{}
vez de{0}
) após o Python 2.7fonte
Se você fará muito isso, talvez seja bom definir uma função de utilitário que permita o uso de substitutos de chaves arbitrários, como
Observe que isso funcionará com parênteses sendo uma sequência de comprimento 2 ou iterável de duas seqüências (para delimitadores de vários caracteres).
fonte
Recentemente, me deparei com isso, porque queria inserir seqüências de caracteres no JSON pré-formatado. Minha solução foi criar um método auxiliar, assim:
Você pode fazer algo como:
Realiza o trabalho se o desempenho não for um problema.
fonte
Se você precisar manter duas chaves na cadeia, precisará de 5 chaves em cada lado da variável.
fonte
A razão é que,
{}
a sintaxe de.format()
que, no seu caso.format()
, não reconhece{Hello}
, gerou um erro.você pode substituí-lo usando chaves duplas {{}},
ou
tente
%s
formatar o texto,fonte
Eu me deparei com esse problema ao tentar imprimir texto, que eu posso copiar e colar em um documento de látex. Eu estendo esta resposta e utilizo os campos de substituição nomeados:
Digamos que você queira imprimir um produto de várias variáveis com índices como , o que no Latex seria
$A_{ 0042 }*A_{ 3141 }*A_{ 2718 }*A_{ 0042 }$
O código a seguir faz o trabalho com campos nomeados para que, para muitos índices, fique legível:fonte
Se você quiser imprimir apenas uma chave (por exemplo
{
){{
, use , e poderá adicionar mais chaves posteriormente na sequência, se desejar. Por exemplo:fonte
Quando você está apenas tentando interpolar cadeias de código, sugiro usar o jinja2, que é um mecanismo de modelo completo para Python, ou seja:
Portanto, você não será obrigado a duplicar chaves, como sugerem várias outras respostas
fonte
Você pode fazer isso usando o método de string bruto, simplesmente adicionando o caracter 'r' sem aspas antes da string.
fonte
\{I am inside braces\}
.