'str' 对象没有属性 'decode'。 Python 3 错误?

新手上路,请多包涵

这是我的代码:

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

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

原文由 user4530588 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 844
2 个回答

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

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

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

至于您的 fetch() 电话,您明确要求仅获取第一条消息。如果要检索更多消息,请使用范围。请参阅 文档

以下命令的 _messageset 选项是一个字符串,指定要处理的一条或多条消息。它可以是一个简单的消息编号 ( '1' )、一系列消息编号 ( '2:4' ) 或一组用逗号分隔的非连续范围 ( '1:3,6:9' )。范围可以包含星号以指示无限上限 ( '3:*' )。

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您在 PyJWT v2.0.0 版本(2020 年 12 月 22 日)之后使用 jwt 身份验证登陆此处,您可能希望将 PyJWT 版本冻结到 requirements.txt 文件中的先前版本。

 PyJWT==1.7.1

原文由 Mathieu Rollet 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题