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