日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python3,异常进阶写法之retrying。

發布時間:2023/12/20 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3,异常进阶写法之retrying。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

異常進階寫法

  • 1、引言
  • 2、異常進階寫法
    • 2.1 普通寫法
      • 2.1.1 追加日志定位異常
      • 2.1.2 增加重試機制
    • 2.2 進階寫法
      • 2.2.1 安裝
      • 2.2.1 裝飾器retry使用
      • 2.2.2 添加最大次數限制
      • 2.2.3 添加最長重試時間
      • 2.2.4 設置固定重試時間
      • 2.2.4 設置時間重試范圍
      • 2.2.5 設置特定異常類型
      • 2.2.6 根據返回值判斷是否重試
  • 3、總結

1、引言

小屌絲:魚哥,最近python的文章寫的有點少了!
小魚:也不算少,只是最近大部分精力都放在全鏈路壓測專欄的文章。
小屌絲:你這全鏈路壓測沒攔著你寫,但是python文章也不能不更新啊。
小魚:我凸(艸皿艸 )~ ~ 天天凌晨兩點半才去睡覺了,還想我啥時候睡覺…
小屌絲:睡覺歸睡覺,但是python文章不能不更新啊。
小魚:我屮艸芔茻~ ~ 我白天上班,還得加加班,晚上10:30 ~ 凌晨2:30 才有時間寫文章,你這是壓榨! !
小屌絲:我這是為了妹子~ ~
小魚:別那妹子做擋箭牌,快說吧,今天遇到啥問題了?
小屌絲:…說實話,最近有個妹子問我,異常有哪些寫法!
小魚:這個問題,問的很好。

關于異常的寫法,小魚最近在面試官的時候,也會經常問到求職者。
但是回答的,有點…不完整吧…
其實關于異常的寫法,小魚整理過一篇《常用斷言及異常處理》,只是當時是在編寫Web端自動化框架時,整理的,
那篇博文,更多的是python自帶的庫。
而今天我們要來介紹的,是第三方庫–retrying

2、異常進階寫法

2.1 普通寫法

2.1.1 追加日志定位異常

我們在通過日志輸出,來定位異常是很常見的一種,
例如:

# -*- coding: utf-8 -*- # @ auth : carl_DJ # @ time : 2021-11-19def do_something():passdef log_error():passtry:do_something() except:log_error()

這個寫法,也是簡單版的異常寫法

2.1.2 增加重試機制

增加重試次數,也就是說第一次請求失敗,再次發起請求,直到請求成功。
這個一般應用于兩種場景:

  • 爬蟲
  • 安全測試的攻防演練

我們來看下代碼:

# -*- coding: utf-8 -*- # @ auth : carl_DJ # @ time : 2021-11-19def do_something():passattemps = 0 success = Flasewhile attemps < 4 and not success:try:do_something()success = Trueexcept:attemps += 1if attemps ==4:break

小屌絲:這個寫法,不錯呢。
小魚:嗯,跟第一個相比,這個寫法,更明確一下,也更高大上一些。
小屌絲:那還有更高大上的寫法嗎。
小魚:那必須的,今天主角還沒出場呢。

2.2 進階寫法

今天我們來說的這個模塊,就是retrying
也是第三方模塊,主要是對程序中異常重試的一種優雅的解決方案。

2.2.1 安裝

安裝方式,老規矩,直接pip安裝:

pip install retrying

如果覺得每次都pip install 費時費力,那就看看小魚這兩篇:

Python3,選擇Python自動安裝第三方庫,從此跟pip說拜拜!!》
Python3,我低調的只用一行代碼,就導入Python所有庫!

2.2.1 裝飾器retry使用

retrying模塊中,提供了一個裝飾器函數retry;
裝飾的函數會在運行失敗的情況下重新執行,默認一直報錯就一直重試,直到成功為止。
我們來看下代碼

# -*- coding: utf-8 -*- # @ auth : carl_DJ # @ time : 2021-11-19import random from retrying import retry#retry 裝飾器 @retry def do_something_retry():if random.randint(0,10) > 1:print(f'this is a test!')raise IOError('raise exception!')else:return "Nice!"print(do_something_retry())


小屌絲:為什么每次執行這段,都會打印出不同次數的"this is a test!"

小魚:這是由于我們程序中只要隨機整數大于1就會打印并且拋出異常。
但是由于我們有裝飾器函數 retry,所以在發生異常就會重新再次執行方法,直到隨機整數大于1,就會打印“Nice!”。
小屌絲:哦,這樣啊,那我不想一直這么重試下去,能不能添加點限制之類的呢?
小魚:嗯,可以的。我們不妨添加最大重試次數為4次。

2.2.2 添加最大次數限制

代碼展示

# -*- coding: utf-8 -*- # @ auth : carl_DJ # @ time : 2021-11-19import random from retrying import retry#retry 裝飾器添加最大次數限制 @retry(stop_max_attempt_number = 4) def do_something_times():print(f"do something several times")raise Exception("raise exception")do_something_times()

小屌絲:真的呢,最多就是4次,那還有別的限制嗎?
小魚:這必須的。

2.2.3 添加最長重試時間

代碼展示

# -*- coding: utf-8 -*- # @ auth : carl_DJ # @ time : 2021-11-19from retrying import retry# 限制最長重試時間(從執行方法開始計算) @retry(stop_max_delay = 4000) def do_something_intime():print(f"do something in time")raise Exception("raise exception")do_something_intime()

2.2.4 設置固定重試時間

代碼展示

# -*- coding: utf-8 -*- # @ auth : carl_DJ # @ time : 2021-11-19from retrying import retry# 設置固定重試時間 @retry(wait_fixed = 3000) def wait_fixed_time():print(f"wait")raise Exception("raise exception")wait_fixed_time()

2.2.4 設置時間重試范圍

代碼展示

# -*- coding: utf-8 -*- # @ auth : carl_DJ # @ time : 2021-11-19from retrying import retry# 設置重試時間的隨機范圍 @retry(wait_random_min=1000,wait_random_max=2000) def wait_random_time():print(f"wait")raise Exception("raise exception")wait_random_time()

2.2.5 設置特定異常類型

代碼展示

# -*- coding: utf-8 -*- # @ auth : carl_DJ # @ time : 2021-11-19from retrying import retry#根據異常重試 def retry_if_io_error(exception):return isinstance(exception, IOError)# 設置特定異常類型重試 @retry(retry_on_exception=retry_if_io_error) def retry_special_error():print(f"retry io error")raise IOError("raise exception")retry_special_error()

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

2.2.6 根據返回值判斷是否重試

代碼展示

# -*- coding: utf-8 -*- # @ auth : carl_DJ # @ time : 2021-11-19from retrying import retry# 通過返回值判斷是否重試 def retry_if_result_none(result):# return result is Noneif result =="123":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 "123"might_return_none()

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

3、總結

在實際應用中,有的大佬偏向于使用第三方庫,而有的大佬,喜歡自帶的庫。
不管是python自帶的庫,還是第三方庫,在擼碼過程中,能直接拋出異常,定位異常,就是最好。
所以,

  • 如果喜歡自帶庫,那就看這篇:《常用斷言及異常處理
  • 如果喜歡第三方庫,就看此篇《Python3,異常進階寫法之retrying

總結

以上是生活随笔為你收集整理的Python3,异常进阶写法之retrying。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲日本不卡 | 亚洲图片欧美在线 | 国产三级网 | 精品国产aⅴ一区二区三区四川人 | 国产经典久久 | 一级美女大片 | 99性趣网| 色久影院 | 黄色成人免费网站 | 粉嫩av一区二区三区四区五区 | 日本小视频网站 | 亚洲国产麻豆 | 青青青手机视频在线观看 | 免费在线你懂的 | 亚洲理论在线观看 | 91极品蜜桃臀 | 成人在线观看你懂的 | 国产亚洲一区二区在线 | 精品欧美视频 | 一本色道久久综合精品婷婷 | 欧美乱做爰xxxⅹ久久久 | 国产一区二区三区在线视频观看 | 亚洲a∨无码无在线观看 | 色吧av色av| 免费色视频 | 人妻妺妺窝人体色www聚色窝 | 日韩精品久久久久久 | 久久亚洲网 | 男女免费网站 | 精品综合在线 | 久久精品国产清自在天天线 | 超碰97人人射妻 | 色婷婷av一区二区三区麻豆综合 | 亚洲男人天堂网址 | 欧美性xxxxxx | 国产剧情精品在线 | 一区二区一级片 | 中文字幕日韩在线播放 | 日一区二区三区 | 中文字幕一区二区三区免费视频 | av中文字幕免费观看 | 国产色播 | 久久久久久久久久久97 | 99国产成人精品 | 国产精品一区二区无码对白 | 爱情岛论坛亚洲自拍 | 成人av无码一区二区三区 | 最新中文av | 亚洲精品一区二区三区在线观看 | 91大神久久 | 婷婷在线免费 | 日本男男激情gay办公室 | 国产13页| 加勒比色综合 | 麻豆传媒网址 | 国产乱码一区二区三区播放 | 熟女少妇一区二区三区 | 成人欧美一区二区三区黑人免费 | 亚洲一区二区三区不卡视频 | 蜜桃视频一区二区三区 | 熟女av一区二区 | 强迫凌虐淫辱の牝奴在线观看 | 亚洲第一在线视频 | 色综合久久久 | 国产ts变态重口人妖hd | 久久这里有精品视频 | 日本一级黄色录像 | 精品二区在线 | 久久视频免费看 | 99黄色网| 久久久国产一区二区三区 | 成人久久 | 亚洲婷婷网 | 国产激情影院 | 免费av影视 | 亚洲免费网址 | 国产香蕉97碰碰碰视频在线观看 | 午夜视频福利在线观看 | 日韩在线观看免费全 | 污片免费观看 | 亚洲av无码专区国产乱码不卡 | 欧美日韩中文字幕一区二区 | 视频区小说区 | 女人喷潮完整视频 | 特大黑人巨交吊性xx | 欧美浓毛大泬视频 | 欧美激情欧美激情在线五月 | 色综合综合网 | 亚洲第一狼人区 | 亚洲成人a∨ | 欧美一本| 污视频在线观看网站 | 97精品一区二区三区 | 男人日女人免费视频 | 亚洲性图第一页 | 免费视频网站在线观看入口 | 久久久久久久福利 | 中文字幕日韩欧美一区二区 | 91精品人妻互换一区二区 |