¿Cómo arreglar el TypeError: argumento de cadena sin un error de codificación en Python?

En pocas palabras, Python 3 generará una excepción TypeError cuando intente codificar una cadena sin especificar específicamente el formato de codificación (Windows -1255, UTF-8, UTF-16, etc.).

Reproduciendo la excepción de error de tipo

Tiene una cadena de Python que ha leído de un archivo, una serie de pandas o un marco de datos, una API web o una base de datos y le gustaría serializarla para almacenarla en el disco o en la memoria para un procesamiento más rápido y eficiente. Aún así, es posible que desee convertir sus bytes en cadenas para acceder a los métodos de manipulación de cadenas que son mucho más amplios que los admitidos por el objeto de bytes.

Llamas a las funciones bytes() o bitarray() y pasas tu cadena como parámetro:

my_str="This is a Python string." my_bytes = bytes(my_str) # this will throw the typeerror exception  my_byte_array = bytearray(my_str) # also this line will raise a typeerror

Esto conducirá a la siguiente excepción: captura de pantalla de Jupyter, pero un error similar en cualquier IDE de Python como PyCharm, VS Code, etc.:

Arreglando la cadena sin error de codificación

Para solucionar este error debes pasar el formato de codificación a la función bytes() o bytes_array(). Esto también es muy importante al decodificar los bytes de vuelta a la cadena.

Ejemplo:

my_bytes = bytes(my_str, 'windows-1255') print (my_bytes)

El código escrito arriba generará el siguiente objeto de bytes:

b'This is a Python string.'

Considerando que, codificando con UTF-16:

my_bytes = bytes(my_str, 'UTF-16') print (my_bytes)

Devolverá lo siguiente:

b'\xff\xfeT\x00h\x00i\x00s\x00 \x00i\x00s\x00 \x00a\x00 \x00P\x00y\x00t\x00h\x00o\x00n\x00 \x00s\x00t\x00r\x00i\x00n\x00g\x00.\x00'

¡Espero eso ayude!