连接超时重发装饰器

import os
import logging
import time
import requests
import logging_set
from bwpptp_cmd_01 import ip_change


def ip_sub():
    """跟换ip"""
    os.chdir("bwpptp_cmd_01")
    ip_change.change()
    logging.info("跟换一次ip")
    os.chdir("..")


def retry_my(tries=1,delay =1):
    # 用来接收函数
    def wrapper(func):
        # 用来接收函数的参数
        def wrapper(*args, **kwargs):
            # 为了方便看抛出什么错误定义一个错误变量
            last_exception = None
            # 循环执行包装的函数

            for num in range(tries):
                try:
                    # 如果没有错误就返回包装的函数,这样跳出循环
                    func(*args, **kwargs)
                    return # 执行成功的话就跳出重试
                except requests.exceptions.ConnectTimeout:# 捕捉特定的异常:连接超时
                    print("重试执行一次")
                    time.sleep(delay)
                    if num == tries-1:#异常执行到最后异常还是出错,就跟换一次ip尝试
                        ip_sub() #跟换ip
                        logging.info("超时重试失败,跟换一次在试一次")
                        try:
                            func(*args, **kwargs)#重发尝试
                        except Exception as e:
                            """发送邮件吧"""
                            print(e)
                    # 捕捉到错误不要return,不然就不会循环了
                    last_exception = e
                    logging.info("超时重试一次")
                    print(e)
                    # 如果要看抛出错误就可以抛出
                    # raise last_exception

        return wrapper

    return wrapper

@retry_my(tries = 1,delay = 5)
def test():
    response = requests.get(url="https://www.baidu.com",timeout =0.0001)

if __name__ == '__main__':
    test()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值