我最近遇到了这个TypeError异常,我发现很难调试 . 我最终将它减少到这个小测试用例:
>>> "{:20}".format(b"hi")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: non-empty format string passed to object.__format__
无论如何,这对我来说非常不明显 . 我的代码的解决方法是将字节字符串解码为unicode:
>>> "{:20}".format(b"hi".decode("ascii"))
'hi '
这个例外是什么意思?有没有办法让它更清晰?
2 回答
bytes
对象没有自己的__format__
方法,因此使用了object
的默认值:它只是意味着你不能使用除了直接,未格式化的未对齐格式之外的任何东西 . 显式转换为字符串对象(就像通过将
bytes
解码为str
一样)来获取format spec support .您可以使用
!s
字符串转换显式转换:object.__format__
显式拒绝格式字符串以避免隐式字符串转换,特别是因为格式化指令是特定于类型的 .尝试格式化
None
时也会发生这种情况:花了一些时间来解决(在我的情况下,当一个实例变量返回
None
时)!