【问题标题】:format r(repr) of print in python3python3中打印的格式r(repr)
【发布时间】:2016-01-25 01:39:44
【问题描述】:
>>>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中使用。为什么会这样?

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

【问题讨论】:

    标签: python string python-3.x format


    【解决方案1】:

    您要查找的内容称为转换标志。应该这样指定

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

    引用 Python 3 的 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"
    

    【讨论】:

      【解决方案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'
      

      请注意,两者都返回用单引号括起来的“我爱你”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-21
        • 2019-09-29
        相关资源
        最近更新 更多