python3函式重試機制retry
阿新 • • 發佈:2020-08-18
背景:
在做介面測試的時候,可能會遇到由於網路問題導致的程式報錯,這個時候需要進行重試了
安裝第三方庫:
pip install retrying
案例:
#!/usr/bin/env python # -*- coding:utf-8 -*- import random from retrying import retry ''' retry引數說明: retry(wait_fixed = 1000) #設定重試間隔時長(ms 1000ms = 1s) retry(wait_random_min = 1000,wait_random_max = 2000,) #隨機重試間隔,將在1~2s內 retry(stop_max_attempt_number = 3) #最大重試次數,超過後正常丟擲異常 retry(stop_max_delay = 2000) #最大延遲時長,2s內未滿足條件則丟擲異常 retry(retry_on_exception = 自定義函式) #當發生指定異常時會執行函式 retry(retry_on_result=自定義函式) #每次都會執行函式,當返回返回True就重試,否則異常退出''' chenwei='我是全域性' ##____________________1、生成大於4的數字_____________________________________________________ #如果重試3次還沒有4則報異常 @retry(stop_max_attempt_number=3)#最大重試次數,超過後正常丟擲異常 def do_something_unreliable(): aa=random.randint(0, 10)#隨機數 if aa > 4: #print('本輪隨機數:',aa) raise IOError("生成資料數超過指定次數!引發異常") else: return "Awesome sauce!" print(do_something_unreliable()) #________________________2、生成隨機數為1的數字____________________________________________ @retry()#不加引數就無限重試 def pick_one(): t = random.randint(0, 100) print('隨機數為:',t) if t != 1: raise Exception('1 is not picked') pick_one() # 隨機數不等於1則一直重試,等於1則停止 ##______________________________3、每次丟擲異常時都會執行的函式________________________________ def stop_fun(attempts, delay): print('你好=',chenwei) #print("stop_func %d--->%d" % (attempts,delay)) @retry(stop_max_attempt_number = 5,stop_func = stop_fun) def pick_one(): t = random.randint(0, 10) print('隨機數為:',t) if t != 1: raise Exception('1 is not picked') pick_one() ##__________________4、指定一個函式,如果指定的函式返回True,就重試,否則退出__________________ ##通過函式返回值確定是否重試 def run2(r):#r就是a的值 #return isinstance(r, int)#判斷r是否為int型別 print('r的值為:',r) if r <80: return True else: return False @retry(retry_on_result=run2) def run(): print("開始重試") t = random.randint(0, 100) print(t) return t run() ##____________________________請求相應包含'請稍後重試'就重試_____________________________________ import requests # @retry(stop_max_attempt_number=3, stop_max_delay=1000) # def test3(): # r = requests.get('http://url', {'xx': 'xx'}) # 如果這裡出現異常了,比如說超時,他就會自動重試 # if '請稍後重試' in r.text: # # 自己判斷什麼時候重試,比如說服務端返回某個資訊,就主動丟擲一個異常,這樣它就會自動重試 # raise Exception('服務端現在有點問題') # test3() #