我最近遇到了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 '
此异常的含义是什么?有没有一种方法可以使它更清晰?
TypeError
在Python 3.4+中才成为,并且会影响沿袭object
而未定义__format__
的所有内容(例如None
;class T(object): pass
等)。