formato r (repr) de impressão em python3

>>>print('You say:{0:r}'.format("i love you"))
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    print('You say:{0:r}'.format("i love you"))
ValueError: Unknown format code 'r' for object of type 'str'

Eu só uso %r(repr()) em python2, e deve funcionar em python3. 5. Porquê?

além disso, que formato devo usar?

Author: thefourtheye, 2015-10-26

1 answers

O que procuras chama-se bandeira de conversão. E isso deve ser especificado assim
>>> print('you say:{0!r}'.format("i love you"))
you say:'i love you'

Citando a documentação oficial do Python 3 ,

Três sinalizadores de conversão de são atualmente suportados: '!s' que chama str() sobre o valor, '!r' que chama repr() e '!a' que chama ascii().

Por favor, note que o Python 2 suporta apenas !s e !r. De acordo com a documentação oficial do Python 2 ,

Existem actualmente duas opções de conversão: {[4] } que chama str() sobre o valor, e '!r' que chama repr().


No Python 2, podias ter feito algo como

>>> 'you say: %r' % "i love you"
"you say: 'i love you'"

Mas mesmo em Python 2( também em Python 3), você pode escrever o mesmo com !r com format, assim

>>> 'you say: {!r}'.format("i love you")
"you say: 'i love you'"

, Citando o exemplo de documentação oficial,

Substituição de %s e %r:

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"
 8
Author: thefourtheye, 2015-10-26 02:44:40