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()方法返回的是字节型数据,可以根据具体情况进行解码处理。
