2

このコードでは、IOErrorをキャッチし、再発生する前にログに記録します。「ピアによって接続がリセットされました」というメッセージが表示されますが、ログに何も表示されません。「接続はピアによってリセットされます」はPythonのIOErrorのサブクラスですか?

     .....
  File "/usr/lib/python2.5/httplib.py", line 1047, in readline
    s = self._read()
  File "/usr/lib/python2.5/httplib.py", line 1003, in _read
    buf = self._ssl.read(self._bufsize)
error: (104, 'Connection reset by peer')
4

1 に答える 1

2

error貼り付けたスタック トレースは、引数を持つクラスの例外のように見えます(104, 'Connection reset by peer)。

したがって、HTTPError 例外ではないようです。実際にはsocket.errorのように見えます。このクラスは、Python 2.6 以降の IOError のサブクラスです。

しかし、あなたは HttpError 例外について尋ねているので、それはあなたの質問ではないと思います。仮定と期待を明確にするために、質問を言い換えていただけますか?

ウサウェアテックからのコメント:

ソケットエラーであることをどのように確認していますか? 私のコードは次のようなものです: try:risky_code(); IOError を除く: logger.debug('...'); 高める; 私は HttpError が IOError のサブクラスであると想定しているので、その例外が発生した場合、それがログに記録されると想定しています。私のログには何もありません

標準ライブラリドキュメントのインデックスを使用したため、および以前にこのエラーに遭遇したため、socket.error であると思います。

Python のどのバージョンを使用していますか? Python 2.5以前だと思います。

例外をログに記録して再発生させることが目的の場合は、例外をそのまま使用することをお勧めします。

try:
    risky_code()
except:
    logger.debug(...)
    raise

また、 を使用して例外クラスが定義されたモジュールを見つけることができますexception.__module__

于 2009-11-08T12:25:54.990 に答える