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

如何使用Python中的requests.exceptions模块捕获异常

发布时间:2023-12-25 03:46:34

在Python中,requests是一个非常流行的HTTP库,用于发送HTTP请求和处理响应。requests.exceptions模块提供了一些常见的异常类,用于捕获在使用requests库时可能出现的异常情况。

首先,我们需要导入requests模块和requests.exceptions模块:

import requests
from requests.exceptions import HTTPError, Timeout, ConnectionError

然后,我们可以在使用requests库发送请求的代码块中使用try-except语句来捕获可能抛出的异常。以下是几个常见的异常类以及如何使用它们的示例:

1. HTTPError异常:用于捕获HTTP错误状态码的异常。

try:
    response = requests.get("http://www.example.com")
    response.raise_for_status()  # 如果响应状态码不为200,会抛出HTTPError异常
except HTTPError as e:
    print("HTTPError:", e)

2. Timeout异常:用于捕获请求超时的异常。

try:
    response = requests.get("http://www.example.com", timeout=3)
except Timeout as e:
    print("Timeout:", e)

3. ConnectionError异常:用于捕获连接错误的异常,比如DNS解析失败、拒绝连接等。

try:
    response = requests.get("http://www.example.com")
except ConnectionError as e:
    print("ConnectionError:", e)

在上述的代码示例中,我们首先发送了一个GET请求。如果在发送请求的过程中出现了异常,就会触发相应的异常类,并将异常对象存储在变量e中。然后,我们可以使用print语句输出异常信息,或者根据需要执行其他操作。

除了上述的三个常见的异常类,requests.exceptions模块还提供了其他一些异常类,包括:

- RequestException:基础的异常类,表示发生了requests库中的任何异常。

- URLRequired:未提供URL时抛出的异常。

- TooManyRedirects:重定向次数太多时抛出的异常。

- InvalidURL:无效URL时抛出的异常。

- MissingSchema:缺少URL方案时抛出的异常。

使用这些异常类的方法和上述示例类似,只需要将对应的异常类名替换到try-except语句中即可。

值得注意的是,requests库还提供了一个Response对象的raise_for_status()方法,可以捕获并抛出HTTP错误状态码异常。在上述的HTTPError异常示例中,我们调用了该方法来检查响应状态码,如果状态码不是200,就会抛出HTTPError异常。

除了requests.exceptions模块提供的异常类,requests库还可以捕获其他一些异常,比如ConnectionError、ReadTimeout等。为了更全面地捕获这些异常,可以使用更通用的Exception类,如下所示:

try:
    response = requests.get("http://www.example.com")
    response.raise_for_status()
except Exception as e:
    print("Exception:", e)

需要注意的是,由于Exception类是一个泛化的异常类,可以捕获几乎所有可能抛出的异常,但这也意味着无法在代码中区分特定的异常类型。因此,在实际应用中,我们应该根据实际需求选择捕获的异常类,以便更好地处理对应的异常情况。

综上所述,使用requests.exceptions模块可以帮助我们捕获和处理在使用requests库时可能出现的异常情况。我们可以根据具体的异常类型来采取相应的措施,例如输出异常信息、重试请求、切换代理等。