如何在urllib2.URLError上打印响应体?

时间:2014-09-02 15:09:00

标签: python rest http

在我创建的脚本中,我将大量数据发布到REST API。

脚本非常模块化,在某个地方的顶级我正在捕获URLError。我需要知道响应正文中的内容,因为那里会有一条错误消息。

我可以使用URLError的方法吗?

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

2 个答案:

答案 0 :(得分:2)

是的。您可以通过e.readlines()

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

答案 1 :(得分:0)

请参阅documenet:https://docs.python.org/2/library/urllib2.html#urllib2.URLError

  

exception urllib2.URLError 处理程序引发此异常(或   当它们遇到问题时导出的异常。它是的子类   IO错误。

     

原因此错误的原因。它可以是消息字符串或   另一个异常实例(远程URL的socket.error,OSError for   本地网址)。

     

例外urllib2.HTTPError 虽然是一个例外(一个子类)   URLError),HTTPError也可以作为非异常   类似文件的返回值(与urlopen()返回的相同)。这个   在处理异常HTTP错误(例如请求)时非常有用   认证

     

code RFC 2616中定义的HTTP状态代码。此数值   对应于在中找到的代码字典中找到的值   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())