Нещодавно я вдарився до цього винятку 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
тощо).