Request模块(七)-- 异常处理

1、python自带的异常都存在内置的命名空间中,所以使用时不需要导入

2、异常类父类Exception - RequestException - ConnectTimeout

import requests
from requests.exceptions import ConnectTimeout #自定义异常
from requests.exceptions import RequestException

try:
    response = requests.get(url="http://47.107.178.45/phpwind/", timeout=0.005)
except ConnectTimeout as e:  #e=Exception() 定义一个异常对象
    print("响应超时异常")
except RequestException as e:
    print("请求出现异常,不知道具体原因")
except Exception as e:  
    print("系统出现异常,不知道具体原因")

说明:

1、timeout为在XX秒内返回响应结果,若未返回则判断为响应超时

2、Exception异常不能写在最上面,否则会直接捕获而无法抛出后面的异常判断,因为所有异常都继承于Exception这个父类

### Python Requests模块中的异常处理 在使用PythonRequests模块时,网络请求可能会因为各种原因失败,比如连接超时、目标服务器不可达或者返回的状态码表示错误。为了使程序更加健壮,在发送HTTP请求的同时还需要考虑异常情况的发生。 #### 基本异常类型 Requests模块提供了多种内置异常类用于捕捉不同的错误场景。以下是常见的几种异常及其含义: - `requests.exceptions.RequestException`:这是所有Requests相关异常的基础类。 - `requests.exceptions.ConnectionError`:当无法建立到远程服务器的连接时抛出此异常。 - `requests.exceptions.Timeout`:如果请求超过了设定的时间限制,则会触发该异常。 - `requests.exceptions.HTTPError`:当接收到不成功的状态码(即4xx或5xx系列)时可以手动引发此类异常[^1]。 #### 实现异常处理的最佳实践 通过结合`try...except`结构以及上述提到的具体异常类别,可以在实际应用中实现更精细的错误检测与恢复逻辑。下面给出一个综合性的例子展示如何优雅地处理这些可能出现的问题: ```python import requests from requests import RequestException, ConnectionError, Timeout, HTTPError def fetch_data(url): try: response = requests.get(url, timeout=5) # 设置超时时间为5秒 # 如果响应状态不是200 OK则主动抛出异常 response.raise_for_status() return response.text except ConnectionError as ce: print(f"Connection error occurred: {ce}") except Timeout as te: print(f"The request timed out: {te}") except HTTPError as he: print(f"An HTTP error occurred: {he} ({response.status_code})") except RequestException as re: print(f"There was an ambiguous exception that occurred while handling your request: {re}") fetch_data('https://nonexistentwebsite.com') ``` 在这个函数里,我们不仅捕获了特定类型的异常以便于针对性调试,还利用了`.raise_for_status()`方法自动检查并报告任何非正常的HTTP响应状态码[^2]。 #### 文件上传过程中的异常管理 除了简单的GET请求外,在涉及POST操作尤其是文件传输过程中也需要特别注意可能发生的各类问题。这里提供另一个关于文件上传的例子,并展示了相应的防护措施: ```python files = {'upload_file': open('/path/to/file', 'rb')} try: r = requests.post('http://someurl.com/upload_endpoint', files=files) r.raise_for_status() finally: for f in files.values(): f.close() ``` 在此代码片段中,“finally”块确保无论是否成功完成请求,所打开的所有文件都将被关闭,从而避免资源泄漏的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我是丸子丫

大佬们来个1毛钱以资鼓励

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

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

打赏作者

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

抵扣说明:

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

余额充值