Arreglar el error Bytes-Like Object Is Required Not STR en Python

Manav Narula 12 abril 2022
Arreglar el error Bytes-Like Object Is Required Not STR en Python

Este tutorial discutirá el error a bytes-like object is required, not 'str' en Python, y las formas de solucionarlo. Este TypeError se muestra cuando se realiza una operación no válida en el tipo de datos incorrecto.

Discutiremos los objetos de cadena y bytes en Python. Las cadenas son una colección de caracteres, mientras que las segundas son una secuencia de bytes, también llamados objetos Unicode. En Python3, todas las cadenas son objetos Unicode por defecto. En Python 2, podemos convertir cadenas a Unicode y viceversa utilizando las funciones encode y decode.

Obtenemos este error cuando trabajamos con un objeto de bytes pero lo tratamos como una cadena. Es común debido al cambio de estos objetos en Python 2 y Python 3. Recibimos este error mientras trabajamos con un archivo binario y lo tratamos como una cadena.

Por ejemplo:

with open("myfile.txt", "rb") as f:
    a = f.read()
    print(type(a))
    a.split(";")

Producción :

TypeError: a bytes-like object is required, not 'str'

En el ejemplo anterior, leemos un archivo en modo rb. Este modo significa leer un archivo binario. El contenido de esto son bytes y se almacenan en la variable a, y mostramos el tipo.

Cuando aplicamos la función split() a esta variable, obtenemos el error se requiere un objeto similar a bytes, no 'str'. Es porque la función split() funciona con objetos de cadena.

Para evitar este error, tenga cuidado con el tipo de lectura de datos y sus operaciones. También podemos corregir este error convirtiendo el objeto similar a bytes en una cadena usando la función str().

Por ejemplo:

with open("myfile.txt", "rb") as f:
    a = str(f.read())
    print(type(a))
    s = a.split(";")

Producción :

<class 'str'>

El str() convierte el objeto en una cadena para usar la función split().

Este error también es frecuente cuando se trabaja con sockets y se envían o reciben datos. Podemos usar el carácter b antes de una cadena para enviar bytes o la función encode() con el parámetro utf-8.

Por ejemplo:

data = b"result"
s.sendall(data)
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Artículo relacionado - Python String

Artículo relacionado - Python Error