Нещодавно я вдарився до цього винятку 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 '
Що означає цей виняток? Чи є спосіб зробити це більш чітким?
TypeErrorPython 3.4+, і воно впливає на все, що успадковується,objectбез визначення__format__в дорозі (наприкладNone;class T(object): passтощо).