异常后重新运行代码

时间:2014-11-08 19:36:30

标签: python-2.7 python-requests

我有一些Python代码,我使用以下代码来搜索https网站:

 for i in range (0, number):
 html = s.get(web_address[i], verify=False, headers=headers)
 ....more unrelated code

目前我从s.get命令[请求库的一部分]每1000个链接中得到一个间歇性错误,但是没有复制 - 如果我立即用完全相同的链接重新运行完全相同的代码之后,它正常工作。

作为参考,我得到的错误行是:

 File "C:\Python27\lib\site-packages\requests\sessions.py", line 469, in get
return self.request('GET', url, **kwargs)
 File "C:\Python27\lib\site-packages\requests\sessions.py", line 457, in request
   resp = self.send(prep, **send_kwargs)
 File "C:\Python27\lib\site-packages\requests\sessions.py", line 569, in send
   r = adapter.send(request, **kwargs)
  File "C:\Python27\lib\site-packages\requests\adapters.py", line 407, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",))
<<< Process finished. (Exit code 1)

我并不太关心修复底层问题(...可能与我连接的服务器有关,只是偶尔表现出奇怪/不一致) - 我只是希望“s.get”代码尝试 - 再次,如果有错误,而不是退出python代码。理想情况下,尝试每个链接尝试s.get命令最多3次,然后如果仍然出现错误,请在该点退出for循环,然后转到for循环中的下一个项目(...但是如果我继续获取10个不同链接的错误,然后退出整个程序...)

提前致谢

1 个答案:

答案 0 :(得分:0)

您的保存密钥位于catching exceptions的域中。 通常,您应该使用以下内容:

   while True:
     try:
       # Your code
     except requests.exceptions.ConnectionError:
       pass

如果您在出现多个例外后需要继续运行脚本 - 请使用元组,即使用except的行应该看起来像except (request.exceptions.ConnectionError, requests.exceptions.TimeoutError)