我正在使用我发布文件的API。但是,当我收到响应时,HTTP状态代码是202.这是预期的,但此外API也将响应XML内容。
因此,在我的try / except块中,urllib2.urlopen将导致引发的urllib2.HTTPError并破坏XML内容。
try:
response = urllib2.urlopen(req)
except urllib2.HTTPError, http_e:
if http_e.code == 202:
print 'accepted!'
pass
print response.read() # UnboundLocalError: local variable 'response' referenced before assignment
我如何期望202并保留响应内容,但不会引发错误?
答案 0 :(得分:4)
修改强>
愚蠢,我忘了检查urllib2返回的异常。它具有我为httplib提供的所有属性。这应该适合你:
try:
urllib2.urlopen(req)
except urllib2.HTTPError, e:
print "Response code",e.code # prints 404
print "Response body",e.read() # prints the body of the response...
# ie: your XML
print "Headers",e.headers.headers
<强>原始强>
在这种情况下,假设您使用HTTP作为传输协议,那么httplib库可能会更幸运:
>>> import httplib
>>> conn = httplib.HTTPConnection("www.stackoverflow.com")
>>> conn.request("GET", "/dlkfjadslkfjdslkfjd.html")
>>> r = conn.getresponse()
>>> r.status
301
>>> r.reason
'Moved Permanently'
>>> r.read()
'<head><title>Document Moved</title></head>\n<body><h1>Object Moved</h1>
This document may be found
<a HREF="http://stackoverflow.com/dlkfjadslkfjdslkfjd.html">here</a></body>'
您可以进一步使用r.getheaders()
等来检查响应的其他方面。