使用web客户端时,connectionLost中可能出现的异常有哪些.代理人



我已经使用web客户端编写了一个http下载程序。代理人

主体使用者对象的connectionLost函数是用一个原因参数调用的。

def connectionLost(self, reason):
if isinstance(reason.value, ResponseDone):
self.df.callback(None)
else:
self.df.errback(reason.value)

我真的很想知道"reason"中可能出现的异常类是什么因为我需要把他们都抓起来,稍后再打电话函数,该函数使用inlineCallbacks。到目前为止,我确定:

ConnectError, BindError, ConnectionClosed, ResponseFailed

这有记录吗?大多数文件都含糊其辞"…带有错误描述的errback…"语句。

您不需要专门捕获它们。异常处理尊重继承:如果您试图捕获基类,并且引发了子类,那么您也会捕获它。Exception是Python中几乎所有异常的基类,所以如果你捕捉到了它,你就会捕捉到几乎所有的异常。

try:
yield agent.request(...)
except Exception as e:
print 'Oh no, some failure'
else:
print 'Success'

没有Agent.request可能失败的所有例外的完整列表,因为不可能提前知道这个列表。失败可能是由于连接设置造成的,但它是纯TCP连接还是HTTPS URL的SSL连接?也许这是由于用户的网络配置不正确而通过SOCKS代理进行的连接。这些都可能以不同的方式失败。这同样适用于实际的HTTP请求本身——谁知道服务器的行为呢?也许它会以一个意外的错误代码进行响应,或者它会以Agent甚至无法解析并触发来自低级HTTP客户端协议实现的异常的内容进行响应。解析器是手工制作的,所以这类问题可能会产生很多不同的异常。然后是内容和传输编码的变化,这可能会调用许多不同的功能(例如,gzip解码器),从而添加更多可能的异常。

因此,与其试图在使用Agent.request的每个地方列出所有这些异常的完整列表,不如只专门处理您所知道的并有特殊代码的异常类型,然后使用except Exception处理其他所有异常。

相关内容

  • 没有找到相关文章

最新更新