首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python "requests“库,我如何判断ConnectionError是客户端还是服务器端?

使用Python "requests“库,我如何判断ConnectionError是客户端还是服务器端?
EN

Stack Overflow用户
提问于 2013-01-09 21:34:30
回答 2查看 1.8K关注 0票数 3

下面是我的丑陋的小代码片段:

代码语言:javascript
复制
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“识别为异常(已解决,谢谢堆栈人员),而是抱怨它不是全局变量。其次,也是更重要的,我真的想知道错误是我这边的,还是服务器这边的。

通常,我希望重试我的错误,但放弃并报告服务器错误。(我的错误指的是服务器错误以外的任何错误。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-09 21:48:49

看一下requests源代码,只有在重试最大次数(MaxRetryError)时才会引发ConnectionError

代码语言:javascript
复制
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

票数 3
EN

Stack Overflow用户

发布于 2013-01-09 21:46:19

与Python中的任何名称一样,您需要导入ConnectionError才能使用它。在这种情况下,可以通过已经导入的requests名称空间使用它,因此可以执行except requests.ConnectionError:

至于您的主要查询,不幸的是,这并不真正有意义。在你和服务器之间有整个互联网:在这一点上,你会把某件事定义为“你的”错误吗?你的wifi接入点?你的路由器?你的调制解调器?你的ISP?在你和目的地之间的某个上游代理?当然,如果不使用像traceroute这样的实用程序,就无法知道错误发生在哪里。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14236426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档