Python TypeError: non-empty format string passed to object.__format__ Python TypeError: non-empty format string passed to object.__format__ python-3.x python-3.x

Python TypeError: non-empty format string passed to object.__format__


bytes objects do not have a __format__ method of their own, so the default from object is used:

>>> bytes.__format__ is object.__format__True>>> '{:20}'.format(object())Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: non-empty format string passed to object.__format__

It just means that you cannot use anything other than straight up, unformatted unaligned formatting on these. Explicitly convert to a string object (as you did by decoding bytes to str) to get format spec support.

You can make the conversion explicit by using the !s string conversion:

>>> '{!s:20s}'.format(b"Hi")"b'Hi'               ">>> '{!s:20s}'.format(object())'<object object at 0x1100b9080>'

object.__format__ explicitly rejects format strings to avoid implicit string conversions, specifically because formatting instructions are type specific.


This also happens when trying to format None:

>>> '{:.0f}'.format(None)Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: non-empty format string passed to object.__format__

That took a moment to work out (in my case, when None was being returned by an instance variable)!