HOWTO · Python
Reparar TypeError: cadena de formato no vacía pasada a Object.__format__ en Python
Este tutorial demuestra las causas de TypeError: cadena de formato no vacía pasada a object.__format__ y cómo resolver este error en Python.
En esta página
El método format() en python le permite sustituir variables y realiza el formateo de datos. Este método no está diseñado para tratar con entradas que no sean las siguientes:
- Cadena denotada como
s - Decimal denotado como
d - Flotador denotado como
f - Carácter denotado como
c - Octal denotado como
o - Hexadecimal denotado como
x - Binario denotado como
b - Exponencial se denota como
e
Si cualquier otro tipo de datos accede al método, el intérprete genera el siguiente error:
TypeError: non-empty format string passed to object.__format__
Causas y soluciones a TypeError: cadena de formato no vacía pasada a Object.__format__ en Python
Supongamos que intentamos invocar el método format() sobre un tipo de datos que no tiene este método, por ejemplo, el tipo de datos byte. El intérprete generará un error porque el objeto de tipo byte no tiene el método format().
En el siguiente código, hemos invocado intencionalmente el método format() con el tipo de datos byte.
Código de ejemplo:
# Python 3.x
"{:10}".format(b"delftstack")
Producción :
#Python 3.x
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-12-1909c614b7f5> in <module>()
----> 1 '{:10}'.format(b'delftstack')
TypeError: unsupported format string passed to bytes.__format__
La solución a este error es convertir explícitamente el tipo de datos de byte a cadena. Usaremos el símbolo !s para la conversión.
Código de ejemplo:
# Python 3.x
s = "{!s:10s}".format(b"delftstack")
print(s)
Producción :
#Python 3.x
b'delftstack'
El TypeError: cadena de formato no vacía pasada a object.__format__ también aparece cuando intentamos formatear Ninguno.
Código de ejemplo:
# Python 3.x
"{:.0f}".format(None)
Producción :
#Python 3.x
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-89103a1332e2> in <module>()
----> 1 '{:.0f}'.format(None)
TypeError: unsupported format string passed to NoneType.__format__
La solución es pasar un tipo de datos válido en lugar de Ninguno.
Código de ejemplo:
# Python 3.x
s = "{!s:10s}".format(b"delftstack")
print(s)
Producción :
#Python 3.x
b'delftstack'