重试连接重置

时间:2011-01-05 15:41:00

标签: python python-3.x urllib

我正在使用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

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

首先,不需要这部分。

except Exception as e:
    raise

IOError的参数是错误类型(套接字错误)和给出的错误。反过来,这个错误不是原始错误,但是错误在args中,所以......

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

应该有效。我没有可以重置的服务器,所以我不能100%测试它但它适用于ECONNREFUSED。 : - )