1異常
異常就是非正常狀態(tài),在Python中使用異常對象來表示異常。若程序在編譯或運(yùn)行過程中發(fā)生錯(cuò)誤,程序的執(zhí)行過程就會(huì)發(fā)生改變,拋出異常對象,程序流進(jìn)入異常處理。如果異常對象沒有被處理或捕捉,程序就會(huì)執(zhí)行回溯(Traceback)來終止程序。
2異常類型
通用異常類型表
Exception類:是通用異?;愊铝挟惓n惥^承于Exception類,python解析器會(huì)自動(dòng)將通用異常類型名稱放在內(nèi)建命名空間中,所以當(dāng)使用通用異常類型時(shí),不需要import exceptions模塊。
3異常處理
3.1 觸發(fā)異常raiseraise關(guān)鍵字:手動(dòng)拋出一個(gè)通用的異常類型(Exception),類似Java中的throw語句。raise關(guān)鍵字后跟異常的名稱,異常名稱能夠標(biāo)識出異常類的對象。執(zhí)行raise語句時(shí),python會(huì)創(chuàng)建指定異常類的對象,還能夠指定對異常對象進(jìn)行初始化的參數(shù),參數(shù)也可以為由若干參數(shù)組成的元組。注意:一旦執(zhí)行raise語句,程序就會(huì)被終止。格式:raise [exceptionType[,argument][,traceback]]
traceback:這個(gè)參數(shù)用于追蹤異常對象,一般很少使用。這樣就可以觸發(fā)一個(gè)異常,并且接收異常信息。3.2 傳遞異常當(dāng)你捕獲到異常之后又希望再次的觸發(fā)異常只需要使用不帶任何參數(shù)的raise關(guān)鍵字。
異常會(huì)在捕獲之后再次觸發(fā)同一個(gè)異常。3.3 assert語句觸發(fā)異常assert語句根據(jù)后面的表達(dá)式的真假來控制程序流。若為True,則往下執(zhí)行。若為False,則中斷程序并調(diào)用默認(rèn)的異常處理器,同時(shí)輸出指定的提示信息。
例如:
執(zhí)行結(jié)果:
3.4 捕獲異常try..except..else注意:except子句的數(shù)量沒有限制,但使用多個(gè)except子句捕獲異常時(shí),如果異常類之間具有繼承關(guān)系,則子類應(yīng)該寫在前面,否則父類將會(huì)直接截獲子類異常。放在后面的子類異常也就不會(huì)執(zhí)行。格式:
4try的工作原理
執(zhí)行一個(gè)try語句時(shí),python解析器會(huì)在當(dāng)前程序流的上下文中作標(biāo)記,當(dāng)出現(xiàn)異常后,程序流能夠根據(jù)上下文的標(biāo)記回到標(biāo)記位,從而避免終止程序。1. 如果try語句執(zhí)行時(shí)發(fā)生異常,程序流跳回標(biāo)記位,并向下匹配執(zhí)行第一個(gè)與該異常匹配的except子句,異常處理完后,程序流就通過整個(gè)try語句(除非在處理異常時(shí)又引發(fā)新的異常)。2. 如果沒有找到與異常匹配的except子句(也可以不指定異常類型或指定同樣異常類型Exception,來捕獲所有異常),異常被遞交到上層的try(若有try嵌套時(shí)),甚至?xí)饘酉蛏咸峤划惓=o程序(逐層上升直到能找到匹配的except子句。實(shí)在沒有找到時(shí),將結(jié)束程序,并打印缺省的錯(cuò)誤信息)。3. 如果在try子句執(zhí)行時(shí)沒有發(fā)生異常,python將執(zhí)行else語句后的語句(可選),然后控制流通過整個(gè)try語句。
執(zhí)行結(jié)果:
嵌套try:
執(zhí)行結(jié)果:
5捕捉多個(gè)異常
方法一:指定一個(gè)通用異常,可以捕獲多個(gè)不同的包含在Exception類中的異常類。
方法二:在一個(gè)except子句后將多個(gè)異常作為元組元素列出。
方法三:except子句后不帶任何異常名稱,捕獲所有異常
6try..finally語句
無論try語句塊中是否觸發(fā)異常,都會(huì)執(zhí)行finally子句中的語句塊,因此一般用于關(guān)閉文件或關(guān)閉因系統(tǒng)錯(cuò)誤而無法正常釋放的資源。比如文件關(guān)閉,釋放鎖,把數(shù)據(jù)庫連接返還給連接池等。
注意:try..finally與try..except 是可以同時(shí)使用的。
NOTE:try…finally 的意義在于,就是我們在 try 代碼塊中執(zhí)行了 return 語句,但是仍然會(huì)繼續(xù)執(zhí)行在 finally 中的代碼塊,所以我們一般用作處理資源的釋放。
7自定義異常
通過(直接或簡介)繼承Exception類來創(chuàng)建一個(gè)自定義異常類,自定義的異常類只能通過raise關(guān)鍵字來手動(dòng)觸發(fā)。
執(zhí)行結(jié)果:
with..as觸發(fā)異常自動(dòng)關(guān)閉資源在使用類文件的流對象時(shí),都需要單獨(dú)的調(diào)用close()來關(guān)閉資源。with..as語句能夠?qū)崿F(xiàn)在with語句塊執(zhí)行完后,自動(dòng)的關(guān)閉文件。如果with語句塊中觸發(fā)異常,會(huì)調(diào)用默認(rèn)的異常處理器處理,而且文件仍然能夠正常關(guān)閉。
執(zhí)行結(jié)果:
8as獲取異常信息
每個(gè)異常都會(huì)有一定的描述信息,可以通過as關(guān)鍵字來獲取。但是這種異常信息并不適合一般用戶閱讀,所以會(huì)使用自定義的異常信息。但是仍然會(huì)將原有的異常信息保留起來,用于后期的異常分析。
執(zhí)行結(jié)果:
異常參數(shù)
也可以使用異常參數(shù)作為輸出的異常信息參數(shù),來獲取異常信息。并且異常參數(shù)中包含有異常信息、錯(cuò)誤數(shù)字、錯(cuò)誤位置等屬性。
執(zhí)行結(jié)果:
9traceback追蹤異常
使用traceback追蹤異常的時(shí)候,需要import traceback模塊。traceback模塊可以有效的幫助查看異常的詳細(xì)信息。注意:若希望獲取異常的詳細(xì)信息,卻又不會(huì)終止程序的執(zhí)行,可以在except子句中使用
輸出sys.exc_type, sys.exc_value, sys.exc_traceback, limit, file等異常信息,實(shí)際上是以線程安全的方式去使用sys.exc_info()函數(shù)來獲取相同的信息。
執(zhí)行結(jié)果:
異常信息的重定向:如果希望將異常的信息保存在一個(gè)指定的文件中,以供后期分析??梢允褂孟旅娴姆椒ǎ?/p>
執(zhí)行結(jié)果:
sys.exc_info()獲取異常信息
traceback.print_exc()函數(shù)實(shí)際上是call sys.exc_info()
執(zhí)行結(jié)果:
異常處理用于處理程序錯(cuò)誤之外,還有許多應(yīng)用的地方。如關(guān)閉資源、平臺(tái)兼容、模塊導(dǎo)入等。
-
處理器
+關(guān)注
關(guān)注
68文章
19896瀏覽量
235244 -
自動(dòng)化
+關(guān)注
關(guān)注
29文章
5784瀏覽量
84883 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86757
原文標(biāo)題:只需9個(gè)步驟,完美實(shí)現(xiàn)自動(dòng)化運(yùn)維異常處理!
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
誠聘高級運(yùn)維自動(dòng)化工程師
銳捷助互聯(lián)網(wǎng)數(shù)據(jù)中心網(wǎng)絡(luò)自動(dòng)化、可視化運(yùn)維
Linux運(yùn)維都要會(huì)哪些shell技能
七個(gè)步驟實(shí)現(xiàn)自動(dòng)化測試
七個(gè)步驟完成自動(dòng)化測試
ansible-first-book 自動(dòng)化運(yùn)維工具
配電自動(dòng)化實(shí)用化運(yùn)維指標(biāo)研究
厲害了!山東電力運(yùn)維自動(dòng)化平臺(tái)正式投運(yùn)
Ansible企業(yè)級自動(dòng)化運(yùn)維探索的詳細(xì)資料說明

城域網(wǎng)自動(dòng)化運(yùn)維實(shí)現(xiàn)的關(guān)鍵點(diǎn)、難點(diǎn)和解決方案研究

城域網(wǎng)是什么,其生命周期和自動(dòng)化運(yùn)維應(yīng)用有哪些特點(diǎn)
使用Python腳本實(shí)現(xiàn)自動(dòng)化運(yùn)維任務(wù)
網(wǎng)絡(luò)設(shè)備自動(dòng)化運(yùn)維工具—ansible入門筆記介紹

自動(dòng)化智能運(yùn)維系統(tǒng)在高鐵牽引變電所的研究與應(yīng)用

自動(dòng)化生產(chǎn)車間異常告警運(yùn)維管理系統(tǒng)解決方案

評論