Недавно я ударил это исключение 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 '
В чем смысл этого исключения? Есть ли способ сделать это более понятным?