Reparar TypeError: cadena de formato no vacía pasada a Object.__format__ en Python

Fariba Laiq 21 junio 2023
Reparar TypeError: cadena de formato no vacía pasada a Object.__format__ en Python

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'
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

Artículo relacionado - Python Error