これは 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.'
>>>