“str”对象没有“decode”属性。Python3错误?

2021-01-21 21:38:18 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码:

import imaplib
from email.parser import HeaderParser

conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login('example@gmail.com', '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])')

我只选择第一封电子邮件。如何全选?

3条回答
网友
1楼 ·

您正在尝试解码已解码的对象。你有一个str,不再需要从UTF-8解码。

只需删除.decode('utf-8')部分:

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

至于您的fetch()调用,您只是显式地请求第一条消息。如果要检索更多邮件,请使用范围。请参见documentation

The message_set options to commands below is a string specifying one or more messages to be acted upon. It may be a simple message number ('1'), a range of message numbers ('2:4'), or a group of non-contiguous ranges separated by commas ('1:3,6:9'). A range can contain an asterisk to indicate an infinite upper bound ('3:*').

网友
2楼 ·

按以下方法使用:

str.encode().decode()
网友
3楼 ·

从Python 3开始,所有字符串都是unicode对象。

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

前面的代码是一样的。所以我认为您应该删除.decode('utf-8')。因为您已经获得了unicode对象。

相关问题