如何打印urllib2.URLError的响应内容?
我正在写一个脚本,这个脚本需要向一个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()