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

Python中HTTPError()异常的基本使用

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

在Python中,HTTPErrorurllib.error模块中定义的异常类,用于处理HTTP请求错误。它是URLError的子类,表示HTTP错误状态。当我们向服务器发送HTTP请求时,如果服务器返回了错误状态码,我们就可以通过捕获HTTPError异常来处理这些错误情况。

HTTPError异常类包含以下几个属性:

- code:HTTP状态码,表示错误类型,例如404表示请求的资源不存在。

- reason:错误的描述,是一个字符串。

- headers:服务器返回的响应头信息,是一个字典。

下面是一个使用HTTPError异常的使用示例:

from urllib import request, error

url = "https://www.example.com/notfound.html"

try:
    response = request.urlopen(url)
except error.HTTPError as e:
    print("An HTTP error occurred: {} {}".format(e.code, e.reason))
    print("Headers: {}".format(e.headers))

在上面的代码中,我们向一个不存在的URL地址发送了HTTP请求。由于服务器会返回404状态码,所以会触发HTTPError异常。在异常处理的代码块中,我们可以使用e.codee.reason属性来获得错误的状态码和描述。

另外,我们还可以使用e.headers属性来获取服务器返回的响应头信息。这个属性返回的是一个字典,我们可以对其进行遍历操作,或者通过键来获取特定的值。

需要注意的是,HTTPError异常只能处理HTTP状态码为400或以上的错误情况。对于其他类型的错误,例如DNS解析错误或连接超时等,HTTPError并不能捕获到,需要使用URLError异常来处理。

下面是一个捕获连接超时错误的示例:

from urllib import request, error

url = "https://www.example.com/"

try:
    response = request.urlopen(url, timeout=1)
except error.URLError as e:
    if isinstance(e.reason, socket.timeout):
        print("A timeout error occurred: {}".format(e.reason))
    else:
        print("An error occurred: {}".format(e.reason))

在上面的代码中,我们设置了超时时间为1秒,如果在1秒内无法建立连接,就会触发URLError异常。在异常处理的代码块中,我们首先判断异常的原因是否是连接超时,如果是的话就打印出超时错误信息。如果不是连接超时,就打印出其他错误信息。

总之,通过捕获HTTPError异常,我们可以对HTTP请求错误进行处理,并以我们期望的方式处理异常情况。同时,还要注意使用URLError异常处理其他类型的错误。