0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

只需9個(gè)步驟,完美實(shí)現(xiàn)自動(dòng)化運(yùn)維異常處理!

馬哥Linux運(yùn)維 ? 來(lái)源:lq ? 2019-02-04 13:51 ? 次閱讀

1異常

異常就是非正常狀態(tài),在Python中使用異常對(duì)象來(lái)表示異常。若程序在編譯或運(yùn)行過(guò)程中發(fā)生錯(cuò)誤,程序的執(zhí)行過(guò)程就會(huì)發(fā)生改變,拋出異常對(duì)象,程序流進(jìn)入異常處理。如果異常對(duì)象沒有被處理或捕捉,程序就會(huì)執(zhí)行回溯(Traceback)來(lái)終止程序。

2異常類型

通用異常類型表

Exception類:是通用異常基類下列異常類均繼承于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語(yǔ)句。raise關(guān)鍵字后跟異常的名稱,異常名稱能夠標(biāo)識(shí)出異常類的對(duì)象。執(zhí)行raise語(yǔ)句時(shí),python會(huì)創(chuàng)建指定異常類的對(duì)象,還能夠指定對(duì)異常對(duì)象進(jìn)行初始化的參數(shù),參數(shù)也可以為由若干參數(shù)組成的元組。注意:一旦執(zhí)行raise語(yǔ)句,程序就會(huì)被終止。格式:raise [exceptionType[,argument][,traceback]]

traceback:這個(gè)參數(shù)用于追蹤異常對(duì)象,一般很少使用。這樣就可以觸發(fā)一個(gè)異常,并且接收異常信息。3.2 傳遞異常當(dāng)你捕獲到異常之后又希望再次的觸發(fā)異常只需要使用不帶任何參數(shù)的raise關(guān)鍵字。

異常會(huì)在捕獲之后再次觸發(fā)同一個(gè)異常。3.3 assert語(yǔ)句觸發(fā)異常assert語(yǔ)句根據(jù)后面的表達(dá)式的真假來(lái)控制程序流。若為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語(yǔ)句時(shí),python解析器會(huì)在當(dāng)前程序流的上下文中作標(biāo)記,當(dāng)出現(xiàn)異常后,程序流能夠根據(jù)上下文的標(biāo)記回到標(biāo)記位,從而避免終止程序。1. 如果try語(yǔ)句執(zhí)行時(shí)發(fā)生異常,程序流跳回標(biāo)記位,并向下匹配執(zhí)行第一個(gè)與該異常匹配的except子句,異常處理完后,程序流就通過(guò)整個(gè)try語(yǔ)句(除非在處理異常時(shí)又引發(fā)新的異常)。2. 如果沒有找到與異常匹配的except子句(也可以不指定異常類型或指定同樣異常類型Exception,來(lái)捕獲所有異常),異常被遞交到上層的try(若有try嵌套時(shí)),甚至?xí)饘酉蛏咸峤划惓=o程序(逐層上升直到能找到匹配的except子句。實(shí)在沒有找到時(shí),將結(jié)束程序,并打印缺省的錯(cuò)誤信息)。3. 如果在try子句執(zhí)行時(shí)沒有發(fā)生異常,python將執(zhí)行else語(yǔ)句后的語(yǔ)句(可選),然后控制流通過(guò)整個(gè)try語(yǔ)句。

執(zhí)行結(jié)果:

嵌套try:

執(zhí)行結(jié)果:

5捕捉多個(gè)異常

方法一:指定一個(gè)通用異常,可以捕獲多個(gè)不同的包含在Exception類中的異常類。

方法二:在一個(gè)except子句后將多個(gè)異常作為元組元素列出。

方法三:except子句后不帶任何異常名稱,捕獲所有異常

6try..finally語(yǔ)句

無(wú)論try語(yǔ)句塊中是否觸發(fā)異常,都會(huì)執(zhí)行finally子句中的語(yǔ)句塊,因此一般用于關(guān)閉文件或關(guān)閉因系統(tǒng)錯(cuò)誤而無(wú)法正常釋放的資源。比如文件關(guān)閉,釋放鎖,把數(shù)據(jù)庫(kù)連接返還給連接池等。

注意:try..finally與try..except 是可以同時(shí)使用的。

NOTE:try…finally 的意義在于,就是我們?cè)?try 代碼塊中執(zhí)行了 return 語(yǔ)句,但是仍然會(huì)繼續(xù)執(zhí)行在 finally 中的代碼塊,所以我們一般用作處理資源的釋放。

7自定義異常

通過(guò)(直接或簡(jiǎn)介)繼承Exception類來(lái)創(chuàng)建一個(gè)自定義異常類,自定義的異常類只能通過(guò)raise關(guān)鍵字來(lái)手動(dòng)觸發(fā)。

執(zhí)行結(jié)果:

with..as觸發(fā)異常自動(dòng)關(guān)閉資源在使用類文件的流對(duì)象時(shí),都需要單獨(dú)的調(diào)用close()來(lái)關(guān)閉資源。with..as語(yǔ)句能夠?qū)崿F(xiàn)在with語(yǔ)句塊執(zhí)行完后,自動(dòng)的關(guān)閉文件。如果with語(yǔ)句塊中觸發(fā)異常,會(huì)調(diào)用默認(rèn)的異常處理器處理,而且文件仍然能夠正常關(guān)閉。

執(zhí)行結(jié)果:

8as獲取異常信息

每個(gè)異常都會(huì)有一定的描述信息,可以通過(guò)as關(guān)鍵字來(lái)獲取。但是這種異常信息并不適合一般用戶閱讀,所以會(huì)使用自定義的異常信息。但是仍然會(huì)將原有的異常信息保留起來(lái),用于后期的異常分析。

執(zhí)行結(jié)果:

異常參數(shù)

也可以使用異常參數(shù)作為輸出的異常信息參數(shù),來(lái)獲取異常信息。并且異常參數(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ù)來(lái)獲取相同的信息。

執(zhí)行結(jié)果:

異常信息的重定向:如果希望將異常的信息保存在一個(gè)指定的文件中,以供后期分析。可以使用下面的方法:

執(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)入等。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19038

    瀏覽量

    228482
  • 自動(dòng)化
    +關(guān)注

    關(guān)注

    28

    文章

    5433

    瀏覽量

    78902
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4758

    瀏覽量

    84293

原文標(biāo)題:只需9個(gè)步驟,完美實(shí)現(xiàn)自動(dòng)化運(yùn)維異常處理!

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    誠(chéng)聘高級(jí)運(yùn)自動(dòng)化工程師

    獵頭職位:高級(jí)運(yùn)自動(dòng)化工程師【合肥】工作職責(zé): 1、根據(jù)基礎(chǔ)架構(gòu)運(yùn)管理需求,規(guī)劃設(shè)計(jì)運(yùn)
    發(fā)表于 12-12 10:37

    銳捷助互聯(lián)網(wǎng)數(shù)據(jù)中心網(wǎng)絡(luò)自動(dòng)化、可視運(yùn)

    自動(dòng)化運(yùn)可視等目的。目前銳捷能夠實(shí)現(xiàn)基于OpenStack、KVM、Docker等虛擬
    發(fā)表于 01-25 09:42

    Linux運(yùn)都要會(huì)哪些shell技能

    。兩者之間,shell幾乎是IT企業(yè)必須使用的運(yùn)自動(dòng)化編程語(yǔ)言,特別是在運(yùn)工作中的服務(wù)監(jiān)控、業(yè)務(wù)快速部署、服務(wù)啟動(dòng)停止、數(shù)據(jù)備份及處理、
    發(fā)表于 11-30 17:38

    個(gè)步驟實(shí)現(xiàn)自動(dòng)化測(cè)試

    本文介紹自動(dòng)化測(cè)試的 7 個(gè)步驟:改進(jìn)自動(dòng)化測(cè)試過(guò)程,定義需求,驗(yàn)證概念,支持產(chǎn)品的可測(cè)試性,具有可延續(xù)性的設(shè)計(jì)( design for sustainability ),有計(jì)劃的部署
    發(fā)表于 07-18 07:42

    個(gè)步驟完成自動(dòng)化測(cè)試

    ,關(guān)鍵問(wèn)題是遵循軟件開發(fā)的基本規(guī)則。本文介紹自動(dòng)化測(cè)試的 7 個(gè)步驟:改進(jìn)自動(dòng)化測(cè)試過(guò)程,定義需求,驗(yàn)證概念,支持產(chǎn)品的可測(cè)試性,具有可延續(xù)性的設(shè)計(jì)( design for susta
    發(fā)表于 07-19 06:12

    ansible-first-book 自動(dòng)化運(yùn)工具

    ansible-first-book 自動(dòng)化運(yùn)工具
    發(fā)表于 09-08 09:31 ?5次下載

    配電自動(dòng)化實(shí)用運(yùn)指標(biāo)研究

    根據(jù)《配電自動(dòng)化實(shí)用化驗(yàn)收細(xì)則》中對(duì)配電自動(dòng)化運(yùn)考核要求,重點(diǎn)圍繞終端在線率、遙信動(dòng)作正確率、遙控使用率與遙控成功率四項(xiàng)指標(biāo)進(jìn)行考核。目前對(duì)配電
    發(fā)表于 03-05 14:55 ?0次下載

    厲害了!山東電力運(yùn)自動(dòng)化平臺(tái)正式投運(yùn)

    日前,國(guó)網(wǎng)山東省電力集團(tuán)公司通過(guò)了山東信息通信技術(shù)監(jiān)督裝備及運(yùn)支撐工具開發(fā)實(shí)施項(xiàng)目的驗(yàn)收,代表著運(yùn)自動(dòng)化平臺(tái)正式投
    發(fā)表于 04-30 11:18 ?4407次閱讀

    Ansible企業(yè)級(jí)自動(dòng)化運(yùn)探索的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Ansible企業(yè)級(jí)自動(dòng)化運(yùn)探索的詳細(xì)資料說(shuō)明主要內(nèi)容包括了:場(chǎng)景一:自動(dòng)化運(yùn)
    發(fā)表于 06-03 08:00 ?2次下載
    Ansible企業(yè)級(jí)<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>運(yùn)</b><b class='flag-5'>維</b>探索的詳細(xì)資料說(shuō)明

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

      針對(duì)城域網(wǎng)運(yùn)自動(dòng)化水平較低、人工成本高且無(wú)法擺脫重復(fù)運(yùn)勞動(dòng)的現(xiàn)狀,本文探討了當(dāng)前城域網(wǎng)自動(dòng)化
    發(fā)表于 10-28 09:09 ?2490次閱讀
    城域網(wǎng)<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>運(yùn)</b><b class='flag-5'>維</b><b class='flag-5'>實(shí)現(xiàn)</b>的關(guān)鍵點(diǎn)、難點(diǎn)和解決方案研究

    城域網(wǎng)是什么,其生命周期和自動(dòng)化運(yùn)應(yīng)用有哪些特點(diǎn)

    Labs 摘? 要針對(duì)城域網(wǎng)運(yùn)自動(dòng)化水平較低、人工成本高且無(wú)法擺脫重復(fù)運(yùn)勞動(dòng)的現(xiàn)狀,本文探討了當(dāng)前城域網(wǎng)
    的頭像 發(fā)表于 12-25 14:24 ?1013次閱讀

    使用Python腳本實(shí)現(xiàn)自動(dòng)化運(yùn)任務(wù)

    許多運(yùn)工程師會(huì)使用 Python 腳本來(lái)自動(dòng)化運(yùn)任務(wù)。Python 是一種流行的編程語(yǔ)言,具有豐富的第三方庫(kù)和強(qiáng)大的自動(dòng)化能力,適用于許
    的頭像 發(fā)表于 04-08 10:36 ?1576次閱讀

    網(wǎng)絡(luò)設(shè)備自動(dòng)化運(yùn)工具—ansible入門筆記介紹

    Ansible是一款自動(dòng)化運(yùn)工具,基于Python開發(fā),集合了眾多運(yùn)工具 (Puppet、CFengine、Chef、SaltStack)的優(yōu)點(diǎn),
    的頭像 發(fā)表于 01-15 13:46 ?1546次閱讀
    網(wǎng)絡(luò)設(shè)備<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>運(yùn)</b><b class='flag-5'>維</b>工具—ansible入門筆記介紹

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

    智能綜合自動(dòng)化系統(tǒng)的運(yùn)技術(shù),提出針對(duì)性的智能運(yùn)解決方案,實(shí)現(xiàn)對(duì)綜合
    的頭像 發(fā)表于 04-16 16:21 ?452次閱讀
    <b class='flag-5'>自動(dòng)化</b>智能<b class='flag-5'>運(yùn)</b>維系統(tǒng)在高鐵牽引變電所的研究與應(yīng)用

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

    隨著科技的進(jìn)步,智能制造已成為全球制造業(yè)的發(fā)展趨勢(shì)。從智能機(jī)器人到自動(dòng)化控制器,各種智能裝備紛紛應(yīng)用于生產(chǎn)流程之中。這種數(shù)字轉(zhuǎn)變不僅提高了生產(chǎn)力,還提升了產(chǎn)品質(zhì)量。但與此同時(shí),也對(duì)異常響應(yīng)和
    的頭像 發(fā)表于 07-27 10:36 ?218次閱讀
    <b class='flag-5'>自動(dòng)化</b>生產(chǎn)車間<b class='flag-5'>異常</b>告警<b class='flag-5'>運(yùn)</b><b class='flag-5'>維</b>管理系統(tǒng)解決方案