¿Cómo corregir el error de tipo solo puede concatenar str (no «bytes») a str en Python?

El motivo del error de tipo no puede concatenar una cadena en un objeto de byte, cuando intenta unir una cadena de Python y un objeto de byte de Python. Puede resolver este problema codificando su cadena o decodificando sus objetos de bytes y solo luego concatenarlos.

Comprender el mensaje de error can’t concat str

Suponga que lee datos de un archivo de texto o csv en una cadena de Python. Como parte de su procesamiento, intenta unir esa cadena con un objeto de bytes:

# read the contents of a file to a Python string  from pathlib import Path file_path = Path(r"C:\Work_Dir\my_file.txt")  with open (file_path, 'r') as f:     file_str = f.read()  # define  a bytes object my_bytes = bytes( 'and this is a bytes object', 'windows-1255')

Ahora vamos a concatenar los objetos:

file_str + my_bytes

Esto generará la siguiente excepción de error de tipo: captura de pantalla tomada de Jupyter. Recibirá mensajes similares en PyCharm, VS Code, Spyder y otros

También podría recibir el siguiente error:

typeerror: can't concat str to bytes

Resolviendo el error de tipo solo se pueden concatenar bytes

Puede corregir el error de varias maneras, aquí hay un par de ideas:

Convertir cadena a bytes

Puede convertir su cadena de Python como un objeto de bytes y unirla con otro byte:

#Python3 my_byte_str  = bytes (file_str, encoding='windows-1255') + my_bytes print(my_byte_str)

Nota: Al convertir a bytes, asegúrese de definir el formato de codificación (en nuestro caso, ‘windows-1255’) de su cadena.

Convertir bytes a cadena

Otra opción es hacer lo contrario, es decir, convertir su objeto de bytes en una cadena. Esta podría ser una mejor opción si desea aprovechar las capacidades de manipulación de cadenas en Python.

#Python3 my_concat_str = file_str + str(my_bytes.decode()) print(my_concat_str)

Nota: es posible que haya encontrado este error al combinar dos o más columnas diferentes de un marco de datos de pandas. Si es así, es posible que desee utilizar el siguiente comando para convertir su columna/serie pandas de bytes a cadena y luego concatenar las columnas.

Aprendizaje adicional

¿Cómo dividir un objeto de cadena de Python en palabras?