Python urllib2:在HTTPError异常中读取内容主体?

79 投票
3 回答
30512 浏览
提问于 2025-04-15 15:36

我正在使用urllib2通过HTTP获取一个页面。有时候,当我的请求有问题时,服务器会返回一个HTTP错误400(错误请求)。不过,这个响应里面也包含一个XML元素,里面有详细的错误信息。如果能看到这个错误信息,而不是仅仅看到urllib2返回的HTTPError异常,那就太好了。

我该怎么做才能在出现异常的情况下仍然获取到文档内容呢?

3 个回答

2

你可以从HTTPError这个异常中读取响应信息。

下面是一个Python3的例子:

import urllib.request

try:
    request = urllib.request.Request('http://httpstat.us/418', headers={'Accept': 'text/plain', 'User-Agent': ''})
    with urllib.request.urlopen(request) as page:
        print('success: ' + page.read().decode())
except urllib.error.HTTPError as httpError:
        error = httpError.read().decode()
        print('error: ' + error)
93
import urllib2
try:
    request = urllib2.Request('http://www.somesite.com')
    response = urllib2.urlopen(req)
except urllib2.HTTPError as e:
    error_message = e.read()
    print error_message

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

54

你可以把错误当作一种响应来处理。

http://www.voidspace.org.uk/python/articles/urllib2.shtml#httperror

当出现错误时,服务器会返回一个HTTP错误代码和一个错误页面。你可以把这个HTTPError实例当作返回的页面上的响应来使用。这意味着除了代码属性外,它还有一些方法,比如read、geturl和info。

撰写回答