Python3的requests库,超时参数timeout设置和异常捕获

在Python的requests库中,get()和post()方法都接受一个名为timeout的参数,该参数用于设置请求的超时时间。如果你没有为这些方法设置timeout参数,那么默认情况下它们可能会等待很长时间,直到服务器响应或连接失败。

在Python的requests库中,超时可以通过timeout参数进行设置。这个参数可以是一个单一的浮点数,也可以是一个包含两个浮点数的元组。

读取超时的具体含义和设置方法:

  1. 单一浮点数的设置

    • timeout参数设置为一个单一的浮点数时,这个值将同时作为连接超时和读取超时的阈值。例如,timeout=5表示连接和读取都将在5秒后超时。
  2. 元组的设置

    • timeout参数设置为一个包含两个浮点数的元组时,第一个数字是连接超时时间(Connect Timeout),第二个数字是读取超时时间(Read Timeout)。例如,timeout=(3, 5)表示连接将在3秒后超时,而读取将在5秒后超时。

超时的例子:

import requests

url = 'http://example.com/api/resource'
data = {'key': 'value'}

try:
    # 设置连接超时为3秒,读取超时为5秒
    response = requests.post(url, json=data, timeout=(3, 5))
    response.raise_for_status()
    print(response.json())
except requests.exceptions.Timeout as e:
    # 捕获超时异常,并区分是连接超时还是读取超时
    if isinstance(e, requests.exceptions.ConnectTimeout):
        print("连接超时")
    elif isinstance(e, requests.exceptions.ReadTimeout):
        print("读取超时")
    print(f"请求超时: {e}")
except requests.exceptions.RequestException as e:
    print(f"发生了一个错误: {e}")

实验结果举例:

# 连接超时
连接超时
请求超时: HTTPConnectionPool(host='192.168.111.1', port=8000): Max retries exceeded with url: /system/command (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7fa0c704d970>, 'Connection to 192.168.111.1 timed out. (connect timeout=3)'))

# 读取超时
读取超时
请求超时: HTTPConnectionPool(host='127.0.0.1', port=8000): Read timed out. (read timeout=5e-05)


# 其他请求超时
发生了一个错误: 404 Client Error:  for url: http://127.0.0.1:8009/system/command

注意事项:

  • 在设置读取超时时间时,需要根据实际的应用场景和服务器响应速度来合理设定。过短的超时时间可能会导致正常的请求因为网络延迟等原因而失败,而过长的超时时间则可能使得程序在等待响应时阻塞过长时间。
  • 当读取超时发生时,requests库会抛出一个requests.exceptions.ReadTimeout异常。在捕获这个异常时,可以根据异常的类型来判断是连接超时还是读取超时。
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值