下面是我的丑陋的小代码片段:
for i in range(5):
try:
self.startTime=time.time()
self.rawfeed=requests.get(self.feedurl)
continue
except ConnectionError:
print "Got a connection error. Retrying", i
time.sleep(i*i) # giving a bit longer wait each time
pass
if i == 5: raise
self.ResponseTime=time.time()-self.startTime这里有两个问题。首先,我的except语句似乎没有将"ConnectionError“识别为异常(已解决,谢谢堆栈人员),而是抱怨它不是全局变量。其次,也是更重要的,我真的想知道错误是我这边的,还是服务器这边的。
通常,我希望重试我的错误,但放弃并报告服务器错误。(我的错误指的是服务器错误以外的任何错误。)
发布于 2013-01-09 21:48:49
看一下requests源代码,只有在重试最大次数(MaxRetryError)时才会引发ConnectionError。
except MaxRetryError, e:
if not self.config.get('safe_mode', False):
raise ConnectionError(e)很难说这是由你方还是服务器引起的,因为两端的许多问题都可能导致这个完全相同的错误。例如,如果服务器的HTTP守护程序未运行,则连接尝试将超时。如果您在路由器中阻止它们,或者如果您的路由器由于其他原因断开连接,也会发生完全相同的情况。
然而,您没有捕捉到的异常HTTPError更有可能是服务器错误,您可能会死于此错误。
您的第二个问题是您没有正确导入这些类。要么将except更改为except requests.ConnectionError,要么执行from requests import ConnectionError, HTTPError。
发布于 2013-01-09 21:46:19
与Python中的任何名称一样,您需要导入ConnectionError才能使用它。在这种情况下,可以通过已经导入的requests名称空间使用它,因此可以执行except requests.ConnectionError:。
至于您的主要查询,不幸的是,这并不真正有意义。在你和服务器之间有整个互联网:在这一点上,你会把某件事定义为“你的”错误吗?你的wifi接入点?你的路由器?你的调制解调器?你的ISP?在你和目的地之间的某个上游代理?当然,如果不使用像traceroute这样的实用程序,就无法知道错误发生在哪里。
https://stackoverflow.com/questions/14236426
复制相似问题