El objeto 'str' no tiene el atributo 'decodificar'. ¿Error de Python 3? [duplicar]

Resuelto asked hace 9 años • 15 respuestas

Aquí está mi código:


import imaplib
from email.parser import HeaderParser

conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login('[email protected]', 'password')
conn.select()
conn.search(None, 'ALL')
data = conn.fetch('1', '(BODY[HEADER])')
header_data = data[1][0][1].decode('utf-8')

En este punto recibo el mensaje de error:

AttributeError: el objeto 'str' no tiene el atributo 'decodificar'

Python 3 ya no tiene str.decode(), entonces, ¿cómo puedo solucionar este problema?

 avatar Feb 18 '15 19:02
Aceptado

Estás intentando decodificar un objeto que ya está decodificado . Tienes un str, ya no es necesario decodificar desde UTF-8.

Simplemente suelte la .decode('utf-8')pieza:

header_data = data[1][0][1]
Martijn Pieters avatar Feb 18 '2015 12:02 Martijn Pieters

Si llega aquí utilizando la autenticación jwt después de la versión PyJWT v2.0.0 (22/12/2020), es posible que desee congelar su versión de PyJWT a la versión anterior en su requirements.txtarchivo.

PyJWT==1.7.1
Mathieu Rollet avatar Dec 28 '2020 21:12 Mathieu Rollet

A partir de Python 3, todas las cadenas son objetos Unicode.

  a = 'Happy New Year' # Python 3
  b = unicode('Happy New Year') # Python 2

Las instrucciones anteriores son las mismas. Entonces creo que deberías eliminar la .decode('utf-8')parte porque ya tienes un objeto Unicode.

Neo Ko avatar Feb 18 '2015 12:02 Neo Ko