bytes
对象没有自己的__format__
方法,因此使用默认的from object
:
>>> bytes.__format__ is object.__format__
True
>>> '{:20}'.format(object())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: non-empty format string passed to object.__format__
这只是意味着您不能在这些格式上使用简单,无格式,未对齐的格式。显式转换为字符串对象(就像通过解码bytes
到一样str
)以获取格式规范支持。
您可以使用!s
字符串转换使转换明确:
>>> '{!s:20s}'.format(b"Hi")
"b'Hi' "
>>> '{!s:20s}'.format(object())
'<object object at 0x1100b9080>'
object.__format__
明确拒绝格式字符串,以避免隐式字符串转换,特别是因为格式设置指令是特定于类型的。