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

歡迎訪問 生活随笔!

生活随笔

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

python

中raise抛出异常_Python 异常处理知识点汇总,五分钟就能学会 !

發布時間:2025/3/12 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中raise抛出异常_Python 异常处理知识点汇总,五分钟就能学会 ! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

異常處理在任何一門編程語言里都是值得關注的一個話題,良好的異常處理可以讓你的程序更加健壯,清晰的錯誤信息更能幫助你快速修復問題。在Python中,和不分高級語言一樣,使用了try/except/finally語句塊來處理異常,如果你有其他編程語言的經驗,實踐起來并不難。

什么是異常?

1.錯誤

從軟件方面來說,錯誤是語法或是邏輯上的。錯誤是語法或是邏輯上的。

語法錯誤指示軟件的結構上有錯誤,導致不能被解釋器解釋或編譯器無法編譯。這些些錯誤必須在程序執行前糾正。

當程序的語法正確后,剩下的就是邏輯錯誤了。邏輯錯誤可能是由于不完整或是不合法的輸入所致;

在其它情況下,還可能是邏輯無法生成、計算、或是輸出結果需要的過程無法執行。這些錯誤通常分別被稱為域錯誤和范圍錯誤。

當python檢測到一個錯誤時,python解釋器就會指出當前流已經無法繼續執行下去。這時候就出現了異常。

2.異常

對異常的最好描述是:它是因為程序出現了錯誤而在正??刂屏饕酝獠扇〉男袨?。

這個行為又分為兩個階段:首先是引起異常發生的錯誤,然后是檢測(和采取可能的措施)階段。

第一階段是在發生了一個異常條件(有時候也叫做例外的條件)后發生的。

只要檢測到錯誤并且意識到異常條件,解釋器就會發生一個異常。引發也可以叫做觸發,拋出或者生成。解釋器通過它通知當前控制流有錯誤發生。

python也允許程序員自己引發異常。無論是python解釋器還是程序員引發的,異常就是錯誤發生的信號。

當前流將被打斷,用來處理這個錯誤并采取相應的操作。這就是第二階段。

對于異常的處理發生在第二階段,異常引發后,可以調用很多不同的操作。

可以是忽略錯誤(記錄錯誤但不采取任何措施,采取補救措施后終止程序。)或是減輕問題的影響后設法繼續執行程序。

所有的這些操作都代表一種繼續,或是控制的分支。關鍵是程序員在錯誤發生時可以指示程序如何執行。

python用異常對象(exception object)來表示異常。遇到錯誤后,會引發異常。

如果異常對象并未被處理或捕捉,程序就會用所謂的回溯(traceback)終止執行

異常處理

捕捉異??梢允褂胻ry/except語句。

try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息并處理。

如果你不想在異常發生時結束你的程序,只需在try里捕獲它。

語法:

以下為簡單的try....except...else的語法:

Try的工作原理是,當開始一個try語句后,python就在當前程序的上下文中作標記,這樣當異常出現時就可以回到這里,try子句先執行,接下來會發生什么依賴于執行時是否出現異常。

  • 如果當try后的語句執行時發生異常,python就跳回到try并執行第一個匹配該異常的except子句,異常處理完畢,控制流就通過整個try語句(除非在處理異常時又引發新的異常)。
  • 如果在try后的語句里發生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層(這樣將結束程序,并打印缺省的出錯信息)。
  • 如果在try子句執行時沒有發生異常,python將執行else語句后的語句(如果有else的話),然后控制流通過整個try語句。
  • 使用except而不帶任何異常類型

    你可以不帶任何異常類型使用except,如下實例:


    以上方式try-except語句捕獲所有發生的異常。但這不是一個很好的方式,我們不能通過該程序識別出具體的異常信息。因為它捕獲所有的異常。

    使用except而帶多種異常類型

    你也可以使用相同的except語句來處理多個異常信息,如下所示:

    try-finally 語句

    try-finally 語句無論是否發生異常都將執行最后的代碼。

    當在try塊中拋出一個異常,立即執行finally塊代碼。

    finally塊中的所有語句執行后,異常被再次觸發,并執行except塊代碼。

    參數的內容不同于異常。

    下面來看一個實例:

    點擊查看大圖

    總結如下:

  • except語句不是必須的,finally語句也不是必須的,但是二者必須要有一個,否則就沒有try的意義了。
  • except語句可以有多個,Python會按except語句的順序依次匹配你指定的異常,如果異常已經處理就不會再進入后面的except語句。
  • except語句可以以元組形式同時指定多個異常,參見實例代碼。
  • except語句后面如果不指定異常類型,則默認捕獲所有異常,你可以通過logging或者sys模塊獲取當前異常。
  • 如果要捕獲異常后要重復拋出,請使用raise,后面不要帶任何參數或信息。
  • 不建議捕獲并拋出同一個異常,請考慮重構你的代碼。
  • 不建議在不清楚邏輯的情況下捕獲所有異常,有可能你隱藏了很嚴重的問題。
  • 盡量使用內置的異常處理語句來 替換try/except語句,比如with語句,getattr()方法。
  • 經驗案例

    傳遞異常 re-raise Exception
    捕捉到了異常,但是又想重新引發它(傳遞異常),使用不帶參數的raise語句即可:

    在Python2中,為了保持異常的完整信息,那么你捕獲后再次拋出時千萬不能在raise后面加上異常對象,否則你的trace信息就會從此處截斷。以上是最簡單的重新拋出異常的做法。

    還有一些技巧可以考慮,比如拋出異常前對異常的信息進行更新。

    如果你有興趣了解更多,建議閱讀這篇博客。

    • http://www.ianbicking.org/blog/2007/09/re-raising-exceptions.html

    Python3對重復傳遞異常有所改進,你可以自己嘗試一下,不過建議還是同上。

    Exception 和 BaseException

    當我們要捕獲一個通用異常時,應該用Exception還是BaseException?我建議你還是看一下 官方文檔說明,這兩個異常到底有啥區別呢? 請看它們之間的繼承關系。

    從Exception的層級結構來看,BaseException是最基礎的異常類,Exception繼承了它。BaseException除了包含所有的Exception外還包含了SystemExit,KeyboardInterrupt和GeneratorExit三個異常。

    有此看來你的程序在捕獲所有異常時更應該使用Exception而不是BaseException,因為另外三個異常屬于更高級別的異常,合理的做法應該是交給Python的解釋器處理。

    except Exception as e和 except Exception, e

    代碼示例如下:

    在Python2的時代,你可以使用以上兩種寫法中的任意一種。在Python3中你只能使用第一種寫法,第二種寫法被廢棄掉了。第一個種寫法可讀性更好,而且為了程序的兼容性和后期移植的成本,請你也拋棄第二種寫法。

    raise “Exception string”

    把字符串當成異常拋出看上去是一個非常簡潔的辦法,但其實是一個非常不好的習慣。

    上面的語句如果拋出異常,那么會是這樣的:

    這在Python2.4以前是可以接受的做法,但是沒有指定異常類型有可能會讓下游沒辦法正確捕獲并處理這個異常,從而導致你的程序掛掉。簡單說,這種寫法是是封建時代的陋習,應該扔了。

    使用內置的語法范式代替try/except

    Python 本身提供了很多的語法范式簡化了異常的處理,比如for語句就處理的StopIteration異常,讓你很流暢地寫出一個循環。

    with語句在打開文件后會自動調用finally中的關閉文件操作。我們在寫Python代碼時應該盡量避免在遇到這種情況時還使用try/except/finally的思維來處理。

    再比如,當我們需要訪問一個不確定的屬性時,有可能你會寫出這樣的代碼:

    其實你可以使用更簡單的getattr()來達到你的目的。

    最佳實踐

    最佳實踐不限于編程語言,只是一些規則和填坑后的收獲。

    1.只處理你知道的異常,避免捕獲所有異常然后吞掉它們。

    2.拋出的異常應該說明原因,有時候你知道異常類型也猜不出所以然的。

    3.避免在catch語句塊中干一些沒意義的事情。

    4.不要使用異常來控制流程,那樣你的程序會無比難懂和難維護。

    5.如果有需要,切記使用finally來釋放資源。

    6如果有需要,請不要忘記在處理異常后做清理工作或者回滾操作。

    異常速查表

    總結

    以上是生活随笔為你收集整理的中raise抛出异常_Python 异常处理知识点汇总,五分钟就能学会 !的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 欧美亚洲国产视频 | 日韩av一卡二卡 | 国内一区二区三区 | 欧美日韩精品在线观看 | 韩国伦理中文字幕 | 国产性猛交普通话对白 | 久久香蕉影视 | 大粗鳮巴久久久久久久久 | 老司机久久精品视频 | 欧美瑟瑟| 男生插女生的网站 | 57pao国产成永久免费视频 | 神马久久久久久久久久久 | 色综合综合色 | 999久久久久 | 乱短篇艳辣500篇h文最新章节 | 淫片网站| 国产一区二区在线视频观看 | 欧美久久成人 | 中文字幕一区二区三区波野结 | 夜夜躁狠狠躁日日躁av | 国产美女主播视频 | 内射后入在线观看一区 | 国产一级在线免费观看 | 天天爽天天射 | 懂色av蜜臀av粉嫩av分享 | 欧美一级色图 | 国产尻逼视频 | 成人精品动漫 | 免费看一级视频 | 国产视频一区二区三区四区五区 | 日韩经典在线 | 久艹视频在线 | 久青草视频在线观看 | 日本在线精品视频 | 石原莉奈在线播放 | 少妇又紧又色又爽又刺激 | 91麻豆蜜桃一区二区三区 | 亚洲国产在 | 中文字幕第八页 | 亚洲精品久久一区二区三区777 | 中文字幕第十二页 | 中文不卡视频 | 色网址在线观看 | 激情第一页 | 亚洲aa视频 | 久久婷婷色综合 | 国产一区二区在线精品 | 欧美一区二区三区成人 | 午夜免费福利在线观看 | 不卡中文 | а√天堂中文在线资源8 | 一级黄色a毛片 | 精品91久久久久久 | 九九热精品视频在线 | 国产伦精品视频一区二区三区 | 亚洲50p | 爱爱的免费视频 | 香蕉视频在线视频 | 欧美大片免费在线观看 | 欧美日韩中文字幕一区二区三区 | 欧美成人三级在线视频 | 国精产品一区一区三区在线 | 一级二级三级黄色片 | 人妻无码一区二区三区久久 | 亚洲永久精品视频 | 一本久久精品一区二区 | 欧美视频在线观看一区二区三区 | 超碰人人擦 | 中文字幕+乱码+中文乱码www | 精品久久人妻av中文字幕 | 在线观看国产一区二区三区 | 尤物国产在线 | 这里只有精品视频在线 | 日韩精品人妻一区二区中文字幕 | 欧美一区二区三区视频 | 欧美日韩激情 | 亚洲综合中文字幕在线 | 国产精品jizz在线观看老狼 | 国产精品久久久久久免费免熟 | www.黄在线 | 日本一本高清视频 | 国产三级大片 | 91免费版黄 | 青青草55| 成年人黄色免费网站 | 尤物视频在线播放 | 色视频线观看在线播放 | 91精品国产综合久久香蕉 | 精品少妇久久久久久888优播 | 日韩精品欧美激情 | 日日骚一区 | 夜夜夜网 | 国产在线观看免费高清 | 很黄很污的视频网站 | 91精品久久久久久久99蜜桃 | av影院在线播放 | 中文字幕国产专区 | 国产毛片18 |