问题描述
>>>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 中工作。
为什么?
此外,我应该使用什么格式?
1楼
您正在寻找的称为转换标志。 应该像这样指定
>>> print('you say:{0!r}'.format("i love you"))
you say:'i love you'
引用 Python 3 的,
当前支持三种转换标志:
'!s'
调用str()
值,'!r'
调用repr()
和'!a'
调用ascii()
。
请注意,Python 2 仅支持!s
和!r
。
根据 Python 2 的,
当前支持两种转换标志:
'!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"
2楼
在python3的f-string格式中,还可以使用:
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'
请注意,两者都返回用单引号括起来的“我爱你”。