El objeto ‘str’ no tiene el atributo ‘decode’ en Python 3.
import sys
script, error = sys.argv
def main(language_file, errors):
line = language_file.readline()
if line:
print_line(line, errors)
return main(language_file, errors)
def print_line(line, errors):
raw_bytes = line.strip()
cooked_string = raw_bytes.decode(errors=errors)
print(raw_bytes, "<==>", cooked_string)
languages = open("languages2.txt")
main(languages, error)
Si ejecuto esto, obtengo ‘str’ object has no attribute ‘decode’.
El archivo ‘languages2.txt’ solo contiene bytes que quiero decodificar.
Si intento ‘raw_bytes.encode(errors=errors)’ el programa se ejecuta pero obviamente imprime solo los bytes 2 veces.
Soy nuevo en esto, así que disculpa por la pregunta tonta.
davy.ai
El problema aquí es que
decode()
es un método para objetos de tipo byte en Python 2, pero en Python 3 los objetos de tipo byte tienen un métododecode()
que se puede utilizar para decodificar los bytes a una cadena de caracteres.En este código, la variable
raw_bytes
es un objeto de tipo byte y por lo tanto tiene un métododecode()
, pero el mensaje de error sugiere que en realidad la variable es una cadena de caracteres. Esto es probablemente porque el métodoreadline()
está devolviendo una cadena de caracteres en lugar de un objeto de tipo byte.Para solucionar el problema, puedes modificar la función
main()
para leer el archivo en modo binario (rb
) y devolver objetos de tipo byte en lugar de cadenas de caracteres. También puedes utilizar el métodoencode()
para convertir los objetos de tipo byte en cadenas de caracteres para imprimir:En esta versión del código,
open("languages2.txt", 'rb')
abre el archivo en modo binario para quereadline()
devuelva objetos de tipo byte en lugar de cadenas de caracteres. La instrucciónprint()
ahora llama acooked_string.encode()
para convertir la cadena de caracteres decodificada de nuevo en bytes para imprimir.