亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

詳解python中的異常捕獲

瀏覽:6日期:2022-07-02 10:06:38
異常

異常是程序發生錯誤的信號,程序一旦出錯就會拋出異常,程序的運行隨之終止。

# 異常處理的三個特征- 異常的追蹤信息- 異常的類型- 異常的內容

捕獲異常的目的:為了增強程序的健壯性,即便程序運行過程中出錯,也不要終止程序,而是捕獲異常并處理,將出錯信息記錄到日志內。

# 語法上錯誤SyntaxError- 處理方式1:必須在程序運行前就改正# 邏輯上的錯誤- 錯誤發生的條件是可以預知的 --> if判斷- 錯誤發生的條件是無法預知的 --> 異常捕獲 try

本來程序一旦出現異常就整體結束掉了,有了異常處理以后,在被檢測的代碼塊出現異常時,被檢測的代碼塊中異常發生位置之后的代碼將不會執行,取而代之的是執行匹配異常的except子代碼塊,其余代碼均正常運行。

異常捕獲

當被檢測的代碼塊中有可能觸發不同類型的異常時,針對不同類型的異常:

如果我們想分別用不同的邏輯處理,需要用到多分支的except(類似于多分支的elif,從上到下依次匹配,匹配成功一次便不再匹配其他)

try: # 有可能會拋出異常的代碼 子代碼1 子代碼2 子代碼3except 異常類型1 as e:# as語法將異常類型的值賦值給變量e,這樣我們通過打印e便可以知道錯誤的原因 passexcept 異常類型2 as e: pass...else: 如果被檢測的子代碼塊沒有異常發生,則會執行else的子代碼finally: 無論被檢測的子代碼塊有無異常發生,都會執行finally的子代碼 # try不能和else單獨連用# try 和 finally 連用,就算出了異常也先執行finally下代碼塊再拋出異常

如果我們想多種類型的異常統一用一種邏輯處理,可以將多個異常放到一個元組內,用一個except匹配。

try: 被檢測的代碼塊except (NameError,IndexError,TypeError): 觸發NameError或IndexError或TypeError時對應的處理邏輯

如果我們想捕獲所有異常并用一種邏輯處理,Python提供了一個萬能異常類型 Exception

try: 被檢測的代碼塊except NameError: 觸發NameError時對應的處理邏輯except IndexError: 觸發IndexError時對應的處理邏輯except Exception: 其他類型的異常統一用此處的邏輯處理

在不符合Python解釋器的語法或邏輯規則時,是由Python解釋器主動觸發的各種類型的異常,而對于違反程序員自定制的各類規則,則需要由程序員自己來明確地觸發異常,這就用到了raise語句,raise后必須是一個異常的類或者是異常的實例

class Student: def __init__(self,name,age): if not isinstance(name,str): raise TypeError(’name must be str’) if not isinstance(age,int): raise TypeError(’age must be int’) self.name=name self.age=agestu1=Student(4573,18) # TypeError: name must be strstu2=Student(’egon’,’18’) # TypeError: age must be int

在內置異常不夠用的情況下,我們可以通過繼承內置的異常類來自定義異常類

class PoolEmptyError(Exception): # 可以通過繼承Exception來定義一個全新的異常 def __init__(self,value=’The proxy source is exhausted’): # 可以定制初始化方法 super(PoolEmptyError,self).__init__() self.value=value def __str__(self): # 可以定義該方法用來定制觸發異常時打印異常值的格式 return ’< %s >’ %self.valueclass NetworkIOError(IOError): # 也可以在特定異常的基礎上擴展一個相關的異常 passraise PoolEmptyError # __main__.PoolEmptyError: < The proxy source is exhausted >raise NetworkIOError(’連接被拒絕’) # __main__.NetworkIOError: 連接被拒絕

最后,Python還提供了一個斷言語句assert expression,斷定表達式expression成立,否則觸發異常AssertionError,與raise-if-not的語義相同,如下

age=’18’# 若表達式isinstance(age,int)返回值為False則觸發異常AssertionErrorassert isinstance(age,int)# 等同于if not isinstance(age,int): raise AssertionError

在了解了異常處理機制后,本著提高程序容錯性和可靠性的目的,讀者可能會錯誤地認為應該盡可能多地為程序加上try...except...,這其是在過度消費程序的可讀性,因為try...except本來就是你附加給程序的一種額外的邏輯,與你的主要工作是沒有多大關系的。所以不要隨便使用異常捕獲,只用當當異常發生時不可預知時,或萬不得已時才使用異常捕獲。

以上就是詳解python中的異常捕獲的詳細內容,更多關于python 異常捕獲的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 亚洲精品一区二区三区婷婷月 | 欧美一级做a影片爱橙影院 欧美一级做一a做片性视频 | 国产精品v欧美精品v日本精 | 久久人体做爰大胆 | 国产肉丝在线 | 免费日本一区 | 色日韩在线| 亚洲美女一级片 | 综合免费一区二区三区 | 欧美亚洲精品一区二三 | 国产高清精品在线 | 欧美真人视频一级毛片 | 欧美另类偷自拍视频二区 | 欧美天天射 | 九九视频免费观看 | 久久久久久久久综合影视网 | 亚洲视频综合网 | 免费一级特黄欧美大片勹久久网 | 中文字幕久久乱码一区二区 | 大伊香蕉精品视频在线天堂 | 99久久国产综合精品女不卡 | 精品国产一区二区三区成人 | 日韩第一视频 | 亚洲欧美国产五月天综合 | 国产精品99r8免费视频2022 | 成人国产激情福利久久精品 | 中国一级毛片国产高清 | 亚洲精品99久久久久中文字幕 | 日韩视频在线观看中字 | 91拍拍在线观看 | 美女免费观看一区二区三区 | 激情在线播放免费视频高清 | 九九热精品视频在线 | 亚洲男女视频 | 91精品影视| 1000部末满18在线观看黄 | 国产开嫩苞实拍在线播放视频 | 欧美大片毛片aaa免费看 | 国产拍拍视频一二三四区 | 九九视频精品在线 | 国产99网站 |