文章目录
- 说明
- 示例1:基本使用
- 示例2:多种异常
说明
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 请求错误变得更加直观和方便。