2011-01-05 21 views
0

私はurllib.requestを使ってインターネットからファイルをダウンロードしています。しかし、時々私はConnection Reset by Peerを取得し、再試行したい。接続時の再試行

私は次のことを試してみましたが、e.errnoがsocket errorではなく、実際のエラー番号が含まれているようです:

while True: 
    try: 
    filename, headers = urllib.request.urlretrieve(url) 
    break 
    except IOError as e: 
    if e.errno != errno.ECONNRESET: 
     raise 
    except Exception as e: 
    raise 

任意の提案を?

答えて

3

まず、この部分は必要ありません。

except Exception as e: 
    raise 

IOErrorの引数は、エラー(ソケットエラー)のタイプとそれに与えられたエラーです。このエラーは、元のエラーではありませんが、そのエラーはargsにあります...

except IOError as e: 
    if e.args[1].args[0].errno != errno.ECONNRESET: 
     raise 

動作する必要があります。私は私にリセットされるサーバを持っていないので、それを100%テストすることはできませんが、ECONNREFUSEDで動作します。 :-)

+0

ありがとうございます。 Exceptionの良いキャッチ。 – Alexandru

関連する問題