2011-01-05 120 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

謝謝。異常情況良好。 – Alexandru 2011-01-07 12:23:23