python - 使用webclient.Agent时connectionLost可能出现哪些异常?

标签 python http twisted webclient

我使用 webclient.Agent 编写了一个 http 下载器。

使用reason参数调用body消费者对象的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 并带有错误描述...”语句。

最佳答案

您不需要专门捕获它们。异常处理尊重继承:如果您 try catch 基类并且引发了子类,您也会捕获它。 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 请求本身 - 谁知道服务器将如何表现?也许它会以意外的错误代码进行响应,或者可能会以代理甚至无法解析的内容进行响应,并触发低级 HTTP 客户端协议(protocol)实现的异常。解析器是手工制作的,因此此类问题可能会导致许多不同的异常。然后是内容和传输编码的变化,这可能会调用许多不同的功能(例如,gzip 解码器),从而增加更多可能的异常(exception)情况。

因此,不要在您使用 Agent.request 的每个地方尝试列出所有这些异常的完整列表,而只专门处理您了解的异常类型并为其提供特殊代码然后用 except Exception 处理其他所有事情。

关于python - 使用webclient.Agent时connectionLost可能出现哪些异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13377673/

相关文章:

Python - 从输入获取子类。我必须编写一个单独的函数吗?

python - 通过循环连续转到 ax._get_lines.prop_cycler.next() 的下一个颜色

http - 为什么人们对所有媒体类型都使用 accept header

python - 在twisted中取消一组HTTP请求

python - 如何使用 Selenium 单击自定义 HTML 标记

python - 评估事件调度 - Verilog 分层事件队列

Java HttpURLConnection : Content Length computation

http - 在浏览 session 期间查看请求/响应 header 的实用程序?

python - 用 Python 编写 P2P 聊天应用程序

python - 需要用 Python 编写的 POP3 服务器或 IMAP 服务器的示例