我有一个python脚本,我拼凑在一起,通过rss feed检查我的Gmail,并将文本输出到屏幕。它适用于python 2.6.6,但我没有成功使它在python 3.2.3下工作。 我用2to3来转换它。代码在这里:https://www.dropbox.com/s/b1277mi7vc7hv3f/gmailcheckparseconky.py3
ObtainEmailFeed函数中出现问题。
当我使用
时,我遇到了可怕的“TypeError("expected bytes, not %s" % s.__class__.__name__)
”错误
b64auth = base64.encodestring("%s:%s" % (user, password))
但是当我使用
时string = bytes("%s:%s" % (user,password), 'utf-8')
string2=str(string,'utf-8')
b64auth = base64.encodestring( string)
我得到了
auth = "Basic " + b64auth
TypeError: Can't convert 'bytes' object to str implicitly
似乎将整个问题带回了整整一圈。
我在我的密码中尝试使用硬编码作为文本,但这不起作用。我得到了 我设置`auth =“基本用户:密码”
时urllib.error.HTTPError: HTTP Error 401: Unauthorized
正如我所说,我把代码拼凑在一起。我不完全理解gmail需要授权的内容。继续这一点,我更倾向于帮助修复这段代码,这样我就可以学习并更好地理解python而不是指向网络上的另一个脚本,它与我正在做的事情做同样/类似的事情
提前致谢, 尼克
答案 0 :(得分:0)
从python3开始,字节和字符串之间存在区别。该错误来自于base64.encodestring
现在是encodebytes
的弃用别名(另请参阅:http://docs.python.org/py3k/library/base64.html#module-base64),因此它希望您提供字节,并且它将为您提供字节数
您可能想要这样做:
string = bytes("%s:%s" % (user,password), 'utf-8')
b64bytes = base64.encodebytes(string)
b64auth = b64bytes.decode('ascii')
然后b64auth将是一个字符串,您将能够在其余代码中将其用作字符串。