0

我有一个我拼凑在一起的 python 脚本,它通过 rss 提要检查我的 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

这似乎使整个问题又回到了原点。

我已经尝试将密码硬编码为文本,但这不起作用。当我 urllib.error.HTTPError: HTTP Error 401: Unauthorized设置 `auth = "Basic user:password"

正如我所说,我将代码拼凑在一起。我不完全理解 gmail 需要我授权什么。继续这种思路,我更愿意帮助修复此代码,以便我可以学习并更好地理解 python,而不是指向网络上的另一个脚本,该脚本与我正在做的事情相同/相似.

在此先感谢,尼克

4

1 回答 1

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 将是一个字符串,您将能够在其余代码中将其用作字符串。

于 2012-09-14T13:09:50.320 回答