欢迎访问宙启技术站
智能推送

Python中HTTPError()异常的捕获和处理方法

发布时间:2023-12-14 17:16:52

在Python中,可以使用urllib库提供的urlopen()函数来发送HTTP请求。在发送请求过程中,可能会遇到各种HTTP错误,比如404 Not Found,500 Internal Server Error等等。当遇到这些错误时,可以使用HTTPError()异常进行捕获和处理。

HTTPError是urllib库中的一个异常类,它继承自URLError类。当发送HTTP请求时,如果返回的状态码不是200,urlopen()函数就会抛出一个HTTPError异常。HTTPError异常中包含一个code属性,用于表示返回的状态码。

下面是一个捕获和处理HTTPError异常的例子:

from urllib.request import urlopen
from urllib.error import HTTPError

try:
    response = urlopen('https://www.example.com/404')
    print('Response:', response.read())
except HTTPError as e:
    print('Error code:', e.code)

在上述例子中,我们使用urlopen()函数发送了一个HTTP请求,但是目标URL是一个不存在的地址。因此,urlopen()函数会抛出一个HTTPError异常。我们使用try-except语句块来捕获这个异常,并打印出错误的状态码。

当运行上述代码时,会输出Error code: 404,表示请求的页面不存在。

除了打印错误状态码之外,我们还可以通过HTTPError异常的其他属性来查看更详细的错误信息。比如,有时候服务器会返回一个包含错误信息的页面,我们可以通过e.read()方法来获取这个页面的内容。

下面是一个修改后的例子,使用了read()方法来获取错误页面的内容:

from urllib.request import urlopen
from urllib.error import HTTPError

try:
    response = urlopen('https://www.example.com/404')
    print('Response:', response.read())
except HTTPError as e:
    print('Error code:', e.code)
    print('Error page:', e.read())

运行上述代码时,会输出类似下面的结果:

Error code: 404
Error page: b'<html>\r
<head><title>404 Not Found</title></head>\r
<body>\r
<center><h1>Not Found</h1></center>\r
<hr><center>nginx</center>\r
</body>\r
</html>\r
'

通过调用e.read()方法,我们可以获取到服务器返回的错误页面的内容。上述代码中的e.read()方法返回的是字节型数据,可以根据具体情况进行解码处理。