>>>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中工作。为什么?
此外,我应该使用什么格式?
答案 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中),您可以使用!r
与format
编写相同的内容,就像这样
>>> 'you say: {!r}'.format("i love you")
"you say: 'i love you'"
引用示例
替换
%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'
请注意,两者都返回单引号中的“我爱你”。