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()
连接超时重发装饰器
最新推荐文章于 2024-07-16 10:15:00 发布