如何打印urllib2.URLError的响应内容?

3 投票
2 回答
2136 浏览
提问于 2025-04-19 10:07

我正在写一个脚本,这个脚本需要向一个REST API发送很多数据。

这个脚本结构比较清晰,在最上层的某个地方我捕获了一个URLError(网络错误)。我需要知道响应的内容,因为里面会有错误信息。

请问URLError有没有什么方法可以让我获取这些内容呢?

    try:
        (calling some function that throws URLError)
    except urllib2.URLError, e:
        print "Error: " + str(e.body_or_something)

2 个回答

0

查看文档:https://docs.python.org/2/library/urllib2.html#urllib2.URLError

异常 urllib2.URLError 当处理程序遇到问题时,会抛出这个异常(或者它的子类异常)。它是IOError的一个子类。

原因 这个错误的原因。可以是一个消息字符串,也可以是另一个异常实例(比如远程网址的socket.error,或者本地网址的OSError)。

异常 urllib2.HTTPError 虽然HTTPError是一个异常(是URLError的子类),但它也可以像普通文件一样返回值(就像urlopen()返回的那样)。这在处理一些特殊的HTTP错误时很有用,比如需要身份验证的请求。

代码 一个HTTP状态码,按照RFC 2616的定义。这个数字对应于BaseHTTPServer.BaseHTTPRequestHandler.responses字典中的一个值。

原因 这个错误的原因。可以是一个消息字符串,也可以是另一个异常实例。

所以当请求抛出urllib2.HTTPError时,你可以访问响应的内容。

试试这个:

try:
    (calling some function that throws URLError)
except urllib2.HTTPError as e:
    body = e.readlines()
    print e.code, e.reason, body
except urllib2.URLError as e:
    print e.reason
except:
    sys.excepthook(*sys.exc_info())
2

是的,确实有这个方法。你可以通过 e.readlines() 来获取响应内容:

    try:
        (calling some function that throws URLError)
    except urllib2.URLError, e:
        print e.readlines()

撰写回答