【问题标题】:Retrying on Connection Reset重试连接重置
【发布时间】:2011-01-05 15:41:00
【问题描述】:

我正在使用urllib.request 从互联网下载文件。但是有时我收到Connection Reset by Peer,我想重试。

我尝试了以下方法,但似乎 e.errno 包含 socket error 而不是实际的 errno:

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

有什么建议吗?

【问题讨论】:

    标签: python python-3.x urllib


    【解决方案1】:

    这部分是不需要的,首先。

    except Exception as e:
        raise
    

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

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

    应该可以。我没有可以在我身上重置的服务器,所以我无法 100% 测试它但它适用于 ECONNREFUSED。 :-)

    【讨论】:

    • 谢谢。很好地抓住了异常。
    猜你喜欢
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    相关资源
    最近更新 更多