python中raise_for_status方法的作用

说明

raise_for_status() 方法在 Python 的 requests 库中用于在发送 HTTP 请求后检查响应的状态码。如果响应的状态码表示请求未成功(即状态码不是 2xx),则该方法会抛出一个 HTTPError 异常。这允许你以一种更结构化的方式来处理请求失败的情况,而不是手动检查状态码。
在这里插入图片描述

当使用 requests 发送请求时,即使请求失败(例如,服务器返回了 404 Not Found),requests 默认也不会抛出异常。这意味着你需要检查响应的状态码来确定请求是否成功。

raise_for_status() 方法简化了这个过程。如果响应的状态码指示请求失败(即状态码不是 200 级别的),则该方法会抛出一个 HTTPError 异常。这使得你可以更容易地捕获和处理请求错误。

示例1:基本使用

import requests

# 假设的 URL 和数据
url = 'https://example.com/api/endpoint'
data = {'key': 'value'}
headers = {'Content-Type': 'application/json'}

# 发送 POST 请求
response = requests.post(url, json=data, headers=headers)

# 使用 raise_for_status() 检查请求是否成功
try:
    response.raise_for_status()
except requests.exceptions.HTTPError as http_err:
    print(f"HTTP 错误发生: {http_err}")
except requests.exceptions.RequestException as req_err:
    # 这里可以捕获其他类型的请求异常,如连接错误、超时等
    print(f"请求异常: {req_err}")
else:
    # 如果请求成功,这里会执行
    print("请求成功!")
    # 处理响应数据,例如打印内容
    print(response.json())

在上面的代码中,我们首先发送一个 POST 请求到指定的 URL,并带上 JSON 格式的数据和请求头。然后,我们使用 try-except 块来捕获可能发生的异常。

如果请求成功(即响应状态码为 2xx),则 raise_for_status() 不会抛出任何异常,程序会继续执行 else 块中的代码。如果请求失败(即响应状态码不是 2xx),raise_for_status() 会抛出一个 HTTPError 异常,该异常随后被 except 块捕获,并打印出相应的错误信息。

通过这种方式,你可以确保在继续处理响应数据之前,请求已经成功完成。如果请求失败,你可以根据异常类型执行适当的错误处理逻辑。

在这里插入图片描述

示例2:多种异常

import requests

url = 'https://example.com/some/nonexistent/path'

response = requests.get(url)

try:
    response.raise_for_status()
except requests.exceptions.HTTPError as errh:
    print ("Http Error:",errh)
except requests.exceptions.ConnectionError as errc:
    print ("Error Connecting:",errc)
except requests.exceptions.Timeout as errt:
    print ("Timeout Error:",errt)
except requests.exceptions.RequestException as err:
    print ("OOps: Something Else",err)

在上面的代码中,如果 requests.get(url) 请求失败(即返回了非 200 级别的状态码),raise_for_status() 会抛出一个异常,该异常随后被 try-except 块捕获并处理。这样,你就可以根据异常类型来执行不同的错误处理逻辑。

总的来说,raise_for_status() 方法使得处理 HTTP 请求错误变得更加直观和方便。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值