在python3中格式化r(repr)的打印

时间:2015-10-26 02:26:28

标签: python string python-3.x format

>>>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'

我只是在python2中使用%r(repr()),它应该在python3.5中工作。为什么?

此外,我应该使用什么格式?

2 个答案:

答案 0 :(得分:13)

您要找的是转换标志。这应该像这样指定

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

引用Python 3&#39; official documentation

  

目前支持三种转换标记:'!s'调用值str()'!r'调用repr()'!a'调用ascii() }。

请注意,Python 2仅支持!s!r。根据Python 2 official documentation

  

目前支持两种转换标记:'!s'调用值str()'!r'调用repr()

在Python 2中,您可能已经完成了类似

的操作
>>> 'you say: %r' % "i love you"
"you say: 'i love you'"

但即使在Python 2(也在Python 3中),您可以使用!rformat编写相同的内容,就像这样

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

official documentation

引用示例
  

替换%s%r

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"

答案 1 :(得分:1)

在python3的f字符串格式中,您还可以使用:

print(f"You say:{'i love you'!r}")
You say:'i love you'
print(f'You say:{"i love you"!r}')
You say:'i love you'

请注意,两者都返回单引号中的“我爱你”。