我正在处理为早期版本的Python编写的代码。
TensorShape = namedtuple('TensorShape', ['batch_size', 'channels', 'height', 'width'])
后来,我有了这个(节略)代码:
s = [hdr, '-' * 94]
...
s.append('{:<20} {:<30} {:>20} {:>20}'.format(node.kind, node.name, data_shape,
tuple(out_shape)))
它在
tuple(out_shape)
上爆炸,除了TypeError: unsupported format string passed to tuple.__format__
因为
out_shape
是一个TensorShape
并且没有定义__format__
方法。所以我把
TensorShape
的定义改为def format_tensorshape(format_spec):
return format("{0} {1} {2} {3}")
TensorShape = namedtuple('TensorShape', ['batch_size', 'channels', 'height', 'width'])
TensorShape.__format__ = format_tensorshape
但这段代码仍然在下游爆炸,只有一个例外。
我做错什么了?
最佳答案
你在正确的轨道上——把传递给format_tensorshape
的two arguments连接到您的format
呼叫:
import collections
def format_tensorshape(self, format_spec):
return format("{0} {1} {2} {3}".format(*self), format_spec)
TensorShape = collections.namedtuple('TensorShape', ['batch_size', 'channels', 'height', 'width'])
TensorShape.__format__ = format_tensorshape
out_shape = TensorShape(1,2,3,4)
print('{:>20}'.format(out_shape))
产量
1 2 3 4