连接重置后的重试
我正在使用 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 个回答
3
首先,这部分其实是不必要的。
except Exception as e:
raise
IOError的参数包括错误的类型(比如说是socket错误)和给它的错误信息。这个错误其实不是最初的错误,而是那个错误在args里面,所以……
except IOError as e:
if e.args[1].args[0].errno != errno.ECONNRESET:
raise
应该可以正常工作。我没有一个会重置的服务器,所以不能百分之百测试。但它在遇到ECONNREFUSED的时候是可以工作的。:-)