这似乎是 poplib.error_proto 的代码。
class error_proto(Exception): pass
它只是在异常中传递来自 POP 响应的字节。我想做的是捕获任何异常,获取这些字节,对它们使用 .decode('ascii') ,然后将它们打印为字符串。我已经编写了自己的测试设置,如下所示:
class B(Exception): pass
def bex(): raise B(b'Problem')
try:
bex()
except B as err:
print(err.decode('ascii'))
我尝试将最后一行替换为:
b = bytes(err)
print(b.decode('ascii'))
但无济于事。这可能吗?如果可以,我将如何实施?
更新:虽然,正如 falsetru 指出的那样,文档说结果是作为字符串返回的,但事实并非如此:
>>> p = poplib.POP3('mail.site.com')
>>> p.user('skillian@site.com')
b'+OK '
>>> p.pass_('badpassword')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python33\lib\poplib.py", line 201, in pass_
return self._shortcmd('PASS %s' % pswd)
File "C:\Python33\lib\poplib.py", line 164, in _shortcmd
return self._getresp()
File "C:\Python33\lib\poplib.py", line 140, in _getresp
raise error_proto(resp)
poplib.error_proto: b'-ERR authorization failed Check your server settings.'
>>>