成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python異常還能寫得如此優雅!

開發 后端
在寫程序時,我們會經常碰到程序出現異常,這時候我們就不得不處理這些異常,以保證程序的健壯性。

???

本文轉載自微信公眾號「Python技術」,作者派森醬 。轉載本文請聯系Python技術公眾號。

在寫程序時,我們會經常碰到程序出現異常,這時候我們就不得不處理這些異常,以保證程序的健壯性。

處理異常的版本有以下幾種,你通常的做法是哪種?

不負責任版本

這種情況下,不作任何處理,任由程序報錯,從而導致程序中斷。

針對簡單的程序,這樣做沒什么問題,大不了我遇到問題之后把問題解決,然后重新運行。但是如果是復雜的系統就會很麻煩了,可能你一個異常阻塞了系統的運行,帶來災難性的后果。

簡單處理版本

簡單處理版本,就是加上異常捕獲,在發生異常時記錄日志,時候可以通過日志來定位異常。

def do_something():     pass def log_error(xxx):     pass  try:    do_something() except:     log_error(xxxx) 

改進處理版本

對于簡單處理版本做了改進,增加重試次數。這個在爬蟲程序中比較常見,第一次請求超時,可能過一會再請求就成功了,所以重試幾次可能會消除異常。

attempts = 0 success = False while attempts < 3 and not success:     try:         do_something()         success = True     except:         attempts += 1         if attempts == 3:             break 

但是這樣做仍然不夠優雅,你可能要在很多地方去寫這種重試的硬編碼,程序看起來亂糟糟的。

今天就給大家介紹一個第三方模塊 —— retrying。它是對程序中異常重試的一種優雅的解決方案。

安裝與使用

安裝

安裝命令還是那么平淡無奇:

pip install retrying 

使用

下面給大家介紹一下這個裝飾函數有哪些可以使用的參數。

生命不息,奮斗不止

retrying 提供一個裝飾器函數 retry,被裝飾的函數會在運行失敗的情況下重新執行,默認一直報錯就一直重試。

import random from retrying import retry  @retry def do_something_unreliable():     if random.randint(0, 10) > 1:         print("just have a test")         raise IOError("raise exception!")     else:         return "good job!"  print(do_something_unreliable()) 

運行這個程序,大家可以看到每次打印“just have a test”這句話的次數都不一樣。這是由于我們程序中只要隨機整數大于1就會打印并且拋出異常。但是由于我們有裝飾器函數 retry,所以在發生異常就會重新再次執行方法,直到隨機整數大于1,就會打印“good job!”。

做人不能太固執

這種無休止地重試,簡直是浪費生命,浪費資源。我們要建設綠色家園,所以不妨加點限制:

# 最大重試次數 @retry(stop_max_attempt_number=5) def do_something_limited():     print("do something several times")     raise Exception("raise exception")  do_something_limited() 

珍惜有限的時間

一寸光陰一寸金,寸金難買寸光陰。我們要珍惜有限的時間,所以不妨給我們的重試加個時間限制:

# 限制最長重試時間(從執行方法開始計算) @retry(stop_max_delay=5000) def do_something_in_time():     print("do something in time")     raise Exception("raise exception")  do_something_in_time() 

駐足欣賞路上風景

人生匆匆數十載,不要一路狂奔而忘記欣賞路邊的美景,有時候我們需要花點時間來欣賞一路的美景:

# 設置固定重試時間 @retry(wait_fixed=2000) def wait_fixed_time():     print("wait")     raise Exception("raise exception")  wait_fixed_time() 

給失敗設個限

雖說我們需要屢敗屢戰的韌性,但是失敗也要有個限度,不能在失敗中度過一生:

# 設置重試時間的隨機范圍 @retry(wait_random_min=1000,wait_random_max=2000) def wait_random_time():     print("wait")     raise Exception("raise exception")  wait_random_time() 

有些人值得等待

茫茫人海中,我就是要等到那個對的人:

# 根據異常重試 def retry_if_io_error(exception):     return isinstance(exception, IOError)  # 設置特定異常類型重試 @retry(retry_on_exception=retry_if_io_error) def retry_special_error():     print("retry io error")     raise IOError("raise exception")  retry_special_error() 

我們自己定義一個函數,判斷異常類型,然后將函數作為參數傳給裝飾函數 retry ,如果異常類型符合,就會進行重試。

有些結果是我們希望見到的

人生并不是一帆風順,有些時候我們會遇到挫折,這些挫折也許在一開始就是我們想要的:

# 通過返回值判斷是否重試 def retry_if_result_none(result):     """Return True if we should retry (in this case when result is None), False otherwise"""     # return result is None     if result =="111":         return True   @retry(retry_on_result=retry_if_result_none) def might_return_none():     print("Retry forever ignoring Exceptions with no wait if return value is None")     return "111"  might_return_none() 

這里我們定義了一個判斷返回值的函數,然后將這個函數作為參數傳給 retry 裝飾函數。當結果返回是“111”時,就會一直重試執行 might_return_none 函數。

生活豐富多彩,并不單調 

我們的生活是豐富多彩的,從來都沒有很單調。所以上面這些參數,我們可以隨意組合使用,并不限定每次只能用一個。比如你可以限定遇到 IOError 時進行重試,并且重試次數最多5次。


責任編輯:武曉燕 來源: Python技術
相關推薦

2020-11-17 09:34:31

API接口后端

2010-08-16 10:10:22

SQL腳本

2021-09-26 09:40:25

React代碼前端

2015-07-27 17:21:51

Google SRE運維

2022-08-12 08:25:33

Python異常信息代碼

2021-10-22 14:50:23

Spring BootJava

2023-10-10 13:23:18

空指針異常Java

2021-04-15 09:18:22

單例餓漢式枚舉

2023-10-08 11:09:22

Optional空指針

2020-11-03 16:00:33

API接口微服務框架編程語言

2019-01-24 16:11:19

前端全局異常數據校驗

2023-05-15 09:59:08

視頻開發

2020-08-24 13:35:59

trycatchJava

2024-12-18 11:30:00

C++20比較運算符

2024-08-02 09:15:22

Spring捕捉格式

2021-04-20 10:50:38

Spring Boot代碼Java

2023-10-27 08:20:12

springboot微服務

2025-06-12 03:55:00

項目處理異常代碼

2023-09-20 15:22:17

人工智能數據

2022-08-03 07:07:10

Spring數據封裝框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费观看男女羞羞视频 | 福利网站在线观看 | 欧美一级片 | 欧美电影免费观看高清 | 99re在线视频精品 | 亚洲 中文 欧美 日韩 在线观看 | 精品国产一区二区三区免费 | 欧美精品乱码99久久影院 | 91手机精品视频 | 欧美国产日韩一区二区三区 | 国产精品s色 | 国产不卡视频在线 | 国产999精品久久久久久绿帽 | 欧美群妇大交群中文字幕 | 久久一区二区视频 | 成年人网站在线观看视频 | cao视频 | 久久久久国产精品一区二区 | 美女张开腿露出尿口 | av在线播放一区二区 | 日韩一区二区在线免费观看 | 国产电影一区二区在线观看 | 99久久免费精品国产免费高清 | 国产精品电影在线观看 | 久久国产精品一区二区三区 | 久久精品欧美一区二区三区不卡 | 99久久精品免费看国产小宝寻花 | 亚洲国产精品久久久 | 成人欧美一区二区三区视频xxx | 欧美在线视频一区二区 | 色婷婷av99xx| 日日摸夜夜爽人人添av | 日韩一区二区三区视频 | 欧美成人激情视频 | 久久久123 | 亚洲天堂二区 | 91在线电影 | 久草免费在线视频 | www.色综合| 国产精品成人一区二区三区夜夜夜 | 国产精品亚洲视频 |