ул. '' объект не имеет атрибут 'расшифровать'. Ошибка в Python 3?



вот мой код:



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')


на данный момент я получаю сообщение об ошибке



AttributeError: 'str' object has no attribute 'decode'


Python 3 больше не имеет декодирования, я прав? как я могу это исправить?



также в:



data = conn.fetch('1', '(BODY[HEADER])')


Я выбираю только 1-е письмо. Как мне выбрать все?

1038   5  

5 ответов:

вы пытаетесь декодировать объект, который уже декодированный. У вас есть str, больше нет необходимости декодировать из UTF-8.

просто удалить .decode('utf-8') детали:

header_data = data[1][0][1]

Что касается вашего fetch() вызов, вы явно просите только первое сообщение. Используйте диапазон, если вы хотите получить больше сообщений. Смотрите документация:

The message_set параметры для команд ниже строка, указывающая одно или несколько сообщений, с которыми нужно действовать. Это может быть простой номер сообщения ('1'), диапазон номеров сообщений ('2:4'), или группа несмежных диапазонов, разделенных запятыми ('1:3,6:9'). Диапазон может содержать звездочку, указывающую на бесконечную верхнюю границу ('3:*').

начните с Python 3, вся строка является объектом unicode.

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

код перед тем же. Поэтому я думаю, что вы должны удалить .decode('utf-8'). Потому что вы уже получили объект unicode.

используйте его следующим образом:

str.encode().decode()

Я не знаком с библиотекой, но если ваша проблема заключается в том, что вам не нужен массив байтов, один простой способ-указать тип кодировки прямо в приведении:

>>> my_byte_str
b'Hello World'

>>> str(my_byte_str, 'utf-8')
'Hello World'

Он уже декодирован в Python3, попробуйте непосредственно он должен работать.

Comments

    Ничего не найдено.