【问题标题】:Printing named tuples打印命名元组
【发布时间】:2011-09-22 21:45:45
【问题描述】:

在 Python 2.7.1 中,我可以创建一个命名元组:

from collections import namedtuple
Test = namedtuple('Test', ['this', 'that'])

我可以填充它:

my_test = Test(this=1, that=2)

我可以这样打印:

print(my_test)

测试(this=1, that=2)

但是为什么我不能这样打印呢?

print("my_test = %r" % my_test)

TypeError:字符串格式化期间并非所有参数都转换

编辑: 我应该知道看看Printing tuple with string formatting in Python

【问题讨论】:

标签: python namedtuple


【解决方案1】:

由于my_test 是一个元组,它将为元组中的每个项目查找% 格式。为了解决这个问题,将它包装在另一个元组中,其中唯一的元素是my_test

print("my_test = %r" % (my_test,))

别忘了逗号。

【讨论】:

  • 不敢相信我又被这个咬了。谢谢!
【解决方案2】:

你可以这样做:

>>> print("my_test = %r" % str(my_test))
my_test = 'Test(this=1, that=2)'

【讨论】:

    【解决方案3】:

    将其解压缩为 2 个参数。比较:

    print("dummy1 = %s, dummy2 = %s" % ("one","two"))
    

    在你的情况下,试着把它放在一个元组中。

    print("my_test = %r" % (my_test,))
    

    【讨论】:

      【解决方案4】:

      早先的答案是有效的,但如果您不想打印名称,这里有一个选项。它是一种单行程序,旨在仅漂亮地打印任意长度的命名元组的内容。给定一个分配给“named_tuple”的命名元组,下面会产生一个以逗号分隔的键=值对字符串:

      ', '.join(['{0}={1}'.format(k, getattr(named_tuple, k)) for k in named_tuple._fields])
      

      【讨论】:

        【解决方案5】:

        正如现在在 4.7.2. printf-style String Formatting 中记录的那样,% 字符串格式化或插值运算符存在问题:

        [printf 样式的字符串格式化操作] 表现出各种怪癖,这些怪癖会导致许多常见错误(例如无法正确显示元组和字典)。使用较新的格式化字符串文字或 str.format() 接口有助于避免这些错误

        例如,您现在可以这样做:

        from collections import namedtuple
        Test = namedtuple('Test', ['this', 'that'])
        my_test = Test(this=1, that=2)
        print("my_test = {0!r}".format(my_test))
        

        【讨论】:

          猜你喜欢
          • 2021-05-18
          • 2016-05-06
          • 2010-09-29
          • 2022-11-14
          • 2014-03-31
          • 1970-01-01
          • 2018-11-27
          • 1970-01-01
          相关资源
          最近更新 更多