5

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

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

我可以填充它:

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

我可以这样打印:

print(my_test)

测试(这=1,那=2)

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

print("my_test = %r" % my_test)

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

编辑: 我应该知道在 Python 中查看具有字符串格式的打印元组

4

5 回答 5

10

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

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

不要忘记逗号。

于 2011-09-22T21:51:16.350 回答
2

你可以这样做:

>>> print("my_test = %r" % str(my_test))
my_test = 'Test(this=1, that=2)'
于 2011-09-22T21:49:03.943 回答
2

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

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

在您的情况下,请尝试将其放入元组中。

print("my_test = %r" % (my_test,))
于 2011-09-22T21:51:54.213 回答
0

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

', '.join(['{0}={1}'.format(k, getattr(named_tuple, k)) for k in named_tuple._fields])
于 2014-03-11T05:27:00.887 回答
0

正如现在在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))
于 2017-03-04T18:24:36.850 回答