这是我的代码:


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'对象没有'decode'属性

Python 3不再有str.decode(),所以我如何解决这个问题?


当前回答

在使用Flask_JWT_extended包创建JWT access_token时,我得到了“str”对象没有属性“decode”。

为了解决这个问题,我升级了我的Flask-JWT-Extended包到Flask-JWT-Extended==4.1.0

供参考:

请访问此页面:https://flask-jwt-extended.readthedocs.io/en/stable/

其他回答

如果你在PyJWT v2.0.0版本(22/12/2020)之后使用jwt身份验证登陆这里,你可能想要在requirements.txt文件中将你的PyJWT版本冻结到之前的版本。

PyJWT==1.7.1

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

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

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

它已经在Python3中解码,直接尝试它应该工作。

我不熟悉这个库,但如果你的问题是你不想要字节数组,一个简单的方法是在强制转换中直接指定编码类型:

>>> my_byte_str
b'Hello World'

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

在使用Flask_JWT_extended包创建JWT access_token时,我得到了“str”对象没有属性“decode”。

为了解决这个问题,我升级了我的Flask-JWT-Extended包到Flask-JWT-Extended==4.1.0

供参考:

请访问此页面:https://flask-jwt-extended.readthedocs.io/en/stable/