【问题标题】:Error codes returned by urllib/urllib2 and the actual pageurllib/urllib2 返回的错误码和实际页面
【发布时间】:2009-11-26 22:00:00
【问题描述】:

urllib/urllib2 的正常行为是,如果在响应的标头中发送错误代码(即 404),则会引发异常。

您如何查找特定错误,即(40 倍或 50 倍)基于不同的错误,做不同的事情。另外,您如何读取返回的 HTML/JSON 等实际数据(数据通常具有与 HTML 错误代码不同的错误详细信息)

【问题讨论】:

    标签: python error-handling


    【解决方案1】:

    当发生 HTTP 错误时,urllib2 会引发 HTTPError。您可以在异常对象上使用code 获取响应代码。您可以使用read()获取响应数据:

    >>> req = urllib2.Request('http://www.python.org/fish.html') >>> 尝试: >>> urllib2.urlopen(req) >>> 除了 urllib2.HTTPError,e: >>> 打印 e.code >>> 打印 e.read() >>> 404

    【讨论】:

    • Dominic,实际数据没有返回,我已经用异常代码更新了问题。
    • 这在很多情况下都会失败,因为URLError 没有code 属性和read() 方法本身,但只有它的子类HTTPError 有。
    • @Issy - 真的吗?这个对我有用。有什么不好的?您的第二条评论表明它正在工作!如果我的不工作而@Denis' 是那么你应该接受他的回答。
    • 事实上它是有效的,因为 HTTPError 是 URLError 的子类,所以捕获 URLError 也会捕获 HTTPError。但它包含一个隐藏的错误,在其他情况下可能会中断。
    【解决方案2】:

    urllib2HTTPError异常也是一个有效的HTTP响应,所以你可以把一个HTTP错误当作一个异常事件或有效响应。但在urllib 中,您必须继承 URLopener 并定义 http_error_<code> 方法[s] 或重新定义 http_error_default 来处理它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      相关资源
      最近更新 更多