python - 需要有关 python 异常处理的帮助

标签 python exception python-3.x urllib

这是我目前正在使用的代码:

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 属性后,您应该能够确定:

  1. reason 属性是否为 socket.error 实例?
  2. 如果是这样,该错误的值是否为二元组,第一个元素对应于 errno.ECONNRESET

关于python - 需要有关 python 异常处理的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5000138/

相关文章:

python - 在 pandas 中进行透视后重置索引而无需多个 header

python - 特定任务后 celery 关闭 worker

python - 如何使用 boto3 资源更新 EC2 实例状态

c++ - 我想捕获一个异常并将其捆绑在我自己的异常中并向上抛出

python - 为什么引发异常会调用 __subclasscheck__?

python - 如何在 Python 的 Moviepy 中使用 fl_image 函数?

python - 删除 pandas 数据框中的重复项后替换特定列值

python - 为什么在 Python 上会出现不一致的异常?

python - 如何在保留字典中的顺序的同时重命名键(Python 3.7+)?

python - 如何重命名PyTest生成的html报告的测试用例