这是我目前正在使用的代码:
url = locations[state]['url']
headers = {'User-Agent':'Firefox/3.6.13'}
req = urllib.request.Request(url, headers=headers)
try:
resp = urllib.request.urlopen(req)
except:
print('Caught error, trying again...')
print('This should be handled better, I\'m sorry')
time.sleep(2)
resp = urllib.request.urlopen(req)
我遇到的问题,因此我真正关心的异常是在发出请求时偶尔会发生这种情况:
URLError: <urlopen error [Errno 104] Connection reset by peer>
这不是确切的错误,我认为这可能是针对 python 2.x 的 urllib/urllib2 而我在 python3 上,我认为是 urllib.error.URLError iirc。不管怎样,我知道我可以做除了 URLError 并且它应该工作(虽然我想知道我是否需要做 urllib.error.URLError 而不是因为这是我的报告),但是我如何测试以确保它是因为104. 我希望它一直重试请求直到它得到它,或者至少尝试指定的次数,我将如何最优雅地做到这一点?
据我所知,错误 104 是因为我的本地路由器无法处理请求并吓坏了,我猜是因为它无法如此快速地处理请求?如果有人对导致这种情况的原因有任何进一步的了解,那也会有所帮助,但我不太担心。
最佳答案
看看http://docs.python.org/py3k/library/urllib.error.html
查看异常的 reason
属性后,您应该能够确定:
- reason 属性是否为
socket.error
实例? - 如果是这样,该错误的值是否为二元组,第一个元素对应于
errno.ECONNRESET
?
关于python - 需要有关 python 异常处理的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5000138/