python中raise_for_status方法的作用

举报
AI浩 发表于 2024/08/27 19:39:42 2024/08/27
【摘要】 @[toc] 说明raise_for_status() 方法在 Python 的 requests 库中用于在发送 HTTP 请求后检查响应的状态码。如果响应的状态码表示请求未成功(即状态码不是 2xx),则该方法会抛出一个 HTTPError 异常。这允许你以一种更结构化的方式来处理请求失败的情况,而不是手动检查状态码。当使用 requests 发送请求时,即使请求失败(例如,服务器返回了...

@[toc]

说明

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 请求错误变得更加直观和方便。

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。