Python的異常重試方法

2021-10-07 09:50:59 字數 1754 閱讀 6177

專案msb服務不穩定,通過python建立websocket總是會有問題,很不穩定,但是一般來說重新建立連線就能成功,多嘗試幾次就好了。

既然有了相應的需求,就要考慮如何去解決這個websocket建立異常重試的問題

原來的**只建立了一次websocket連線:

ws.connect(url, header=header)
方法一:

使用迴圈重試的方式:

import  time

for i in

range(4

):try:

ws.connect(url, header=header)

break

except exception as e:

atlog.info(

"let's retry"

) time.sleep(

2)

該方式需要先導入time模組,此處是考慮到重試中間加點間隔時間會好點,密集重試效果不好。

重試後建立鏈結成功就退出迴圈。

from retrying import retry

@classmethod

#stop_max_attempt_number最大重試次數, 兩次, stop_max_delay是兩次重試間隔多少毫秒,這裡我寫的間隔1秒

@retry(stop_max_attempt_number=

3,stop_max_delay=

1000

)def

do_connect

(cls, ws, url, header)

: atlog.info(

"let's retry.."

) ws.connect(url, hearder=header)

retrying是乙個python的重試包,可以用來自動重試一些可能執行失敗的程式段。retryiing提供乙個裝飾器函式retry,被裝飾的函式就會在執行失敗的條件下重新執行,預設只要一直報錯就會不斷重試。

retry還可以接受一些引數,這個從原始碼中retrying類的初始化函式可以看到可選的引數:

另外,我們可以指定要在出現哪些異常的時候再去retry,這個要用retry_on_exception傳入乙個函式物件:

def

retry_if_io_error

(exception)

:return

isinstance

(exception, ioerror)

@retry(retry_on_exception=retry_if_io_error)

defread_a_file()

:with

open

("file"

,"r"

)as f:

return f.read(

)

還可以指定要在得到哪些結果的時候去retry,這個要用retry_on_result傳入乙個函式物件:

def

retry_if_result_none

(result)

:return result is

none

@retry(retry_on_result=retry_if_result_none)

defget_result()

:return

none

Python中異常重試的解決方案詳解

1 2345 67defretry if io error exception returnisinstance exception,ioerror retry retry on exception retry if io error defread a file withopen file r a...

Python中異常重試的解決方案詳解

前言 大家在做資料抓取的時候,經常遇到由於網路問題導致的程式儲存,先前只是記錄了錯誤內容,並對錯誤內容進行後期處理。原先的流程 def crawl page url pass def log error url pass url try crawl page url except log error...

非同步異常重試函式 tryCall

在spa程式中我們遇到的網路環境和傳統網頁程式不同,因此思維也不能和傳統頁面雷同,面對不穩定的網路環境,為了不使一點網路不穩定就造成程式錯誤,需要引入容錯能力,或者說鈍化網路請求對於網路環境的敏感性,trycall就是這樣乙個函式,在出現異常的情況下可以進行重試,重試的時間間隔和總次數可以自定義 當...