乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

如果你想選擇一種語言來入門編程,那麼Python絕對是首選!

其非常接近自然語言,精簡了很多不必要的分號和括號,非常容易閱讀理解。編程簡單直接,更適合初學編程者,讓其專注於編程邏輯,而不是困惑於晦澀的語法細節上,比起JAVA、C#和C/C++這些編程語言相對容易很多。

因此,即使是非計算機專業或者沒有基礎的小白,也能分分鐘入門。Python的排名從去年開始就藉助人工智能持續上升,現在它已經成為了第一名。

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

什麼是例外?

1。錯誤

就軟件而言,錯誤是合乎邏輯的或合乎邏輯的。錯誤是合乎邏輯的或合乎邏輯的。

語法錯誤表明,軟件的結構中存在錯誤,無法由解釋器解釋,也不能編譯編譯器。這些錯誤必須在程序執行前更正。

當程序的語法正確時,剩下的就是邏輯錯誤。邏輯錯誤可能是由於不完整或非法輸入引起的;

在其他情況下,可能無法執行邏輯不能生成、計算或輸出結果的過程。這些錯誤通常被稱為域錯誤和範圍錯誤。

當Python檢測到錯誤時,Python解釋器指出當前流無法繼續。這時有一種反常現象。

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

2。異常

對異常的最好描述是因為程序錯誤,在正常控制流之外行為。

這種行為分為兩個階段:第一個是導致異常發生的錯誤,然後是檢測(和可能的措施)階段。

第一階段發生在異常情況(有時稱為異常)之後。

只要檢測到錯誤並實現異常條件,解釋器中就會出現異常。觸發器也可以稱為觸發器,拋出或生成。解釋器通知當前控制流有錯誤。

Python還允許程序員為自己創建異常。無論是Python解釋器還是程序員,異常都是錯誤的信號。

將中斷當前流以處理此錯誤並採取相應操作。這是第二階段。

異常處理發生在第二階段,在異常發生後,可以調用許多不同的操作。

您可以忽略錯誤(記錄錯誤,但不採取任何措施,採取補救措施並終止程序)。或者試著在減少問題的影響後繼續這個過程。

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

Python使用異常對象(異常對象)來表示異常。遇到錯誤時會出現例外情況。

如果異常對象沒有被處理或捕獲,程序將終止執行,即所謂回溯(回溯)。

異常處理

語句可以用來捕獲異常。

試用語句用於檢測嘗試語句塊中的錯誤,以便除了語句可以捕獲異常信息並處理它。

如果您不希望在異常時終止程序,請在嘗試中捕獲它。

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

Grammar:

下面是嘗試的簡單語法……除了…其他的:

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

嘗試的工作原理是,在開始嘗試語句時,Python被標記在當前程序的上下文中,這樣當出現異常時,它可以返回這裡。嘗試子句首先執行,接下來會發生什麼取決於執行中是否有異常。

  1. 如果在執行語句後執行異常,則Python會跳回去嘗試並執行與異常匹配的第一個除外子句。在處理異常之後,控制流將通過整個嘗試語句(除非在處理異常時出現新異常)。

  2. 如果在嘗試後語句中有一個異常,但是除了子句沒有匹配,異常將被髮送到上一個嘗試或程序的頂部,這將結束程序並打印默認的錯誤消息。

  3. 如果在嘗試子句的執行中沒有例外,Python將在其他語句之後執行語句(如果有其他的話),然後通過整個嘗試語句控制流。

使用except而不帶任何異常類型

除例外類型外,您可以使用,如下所示:

上面的嘗試除了語句捕獲所有已經發生的異常。但這不是通過程序識別特定異常信息的好方法。因為它捕獲了所有異常。

使用except而帶多種異常類型

您還可以使用同一個語句來處理多個異常信息,如下所示:

try-finally 語句

最後一個語句執行最後一個代碼,不管是否有異常。

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

當一個異常被拋出嘗試塊時,最後塊代碼立即執行。

在最後一個塊中的所有語句執行後,再次觸發異常,執行除塊代碼之外的執行。

參數的內容與異常不同。

下面舉個例子:

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

點擊放大

總結如下:

  1. 除了陳述之外,沒有必要,最後的陳述是沒有必要的,但兩個必須有一個,否則沒有嘗試的意義。

  2. 除了聲明之外,還有不止一種說法。Python將按照除語句外的順序匹配指定的異常。如果處理異常,則稍後將不進入該例外聲明。

  3. 除了語句可以以元組的形式以元組的形式指定多個異常,還可以看到實例代碼。

  4. 如果在例外語句之後沒有指定異常類型,默認情況下會捕獲所有異常,並且可以通過日誌記錄或sys模塊獲取當前異常。

  5. 如果你想捕獲一個異常來重複它,請使用“上升”,不要帶任何參數或信息在它後面。

  6. 不建議捕獲和拋出相同的異常。考慮重構代碼。

  7. 不建議在邏輯不明確的情況下捕獲所有異常,並且可能隱藏了一個非常嚴重的問題。

  8. 試著更換嘗試/除了內置的異常處理語句的語句,如與聲明的getattr()方法。

實證案例

傳遞異常重新引發異常

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

在python2,為了保持異常的完整信息,你不能在添加例外對象提高當你抓住它了,否則你的跟蹤信息將從這裡切斷。以上是重新拋出異常的最簡單方法。

還可以考慮一些其他技術,例如在拋出異常之前更新異常信息。

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

Python3提高了重複傳輸的例外,你可以自己試試,但建議同。

Exception 和 BaseException

當我們想要捕捉的一般例外,我們應該使用異常或baseexception?我建議你看看官方文件,這兩個例外有什麼區別?請看他們之間的繼承權。

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

從異常的層次結構,baseexception是最基本的異常類繼承它,和異常。除了所有的例外,baseexception包含三systemexit例外,keyboardinterrupt和generatorexit。

看來,你的程序應該使用異常而不是baseexception當捕獲所有異常,因為其他三個例外,屬於高層次的例外,和合理的方式應該是Python解釋器處理。

except Exception as e和 except Exception, e

代碼示例如下所示:

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

在python2時代,你可以使用任何寫作的上述兩種風格。在Python3,你只能使用寫作第一的風格,和第二形式被遺棄。第一種文字可讀性更好,為了程序的兼容性和後期移植的成本,你也留下了第二種寫作方式。

raise “Exception string”

將字符串作為異常拋出似乎是非常簡單的方法,但這是一個非常壞的習慣。

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

如果上面的語句被拋出異常,它將是這樣的。

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

這是可接受的在python2.4,但沒有指定異常類型,它可能使正確捕獲和處理異常的下游,導致你的程序被掛起。總之,這種文體是封建時代的不良習慣,應該扔掉。

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

Python本身提供了許多語法範式,簡化處理異常,如StopIteration異常處理的語句,讓你寫一個循環順暢。

在打開文件之後,帶語句自動調用關閉的文件操作。當我們編寫Python代碼時,當遇到這種情況時,我們應該避免嘗試/排除/最後考慮。

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

例如,當我們需要訪問一個不確定的屬性時,您可能會編寫這樣的代碼:

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

事實上,你可以使用一個更簡單的getattr()來實現你的目標。

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

最佳實踐

最好的做法不限於編程語言,而只限於一些規則,並在填充之後收穫。

1。例外,您知道,避免捕捉所有異常併吞噬它們。

2。拋出的異常應該解釋為什麼,有時您知道異常類型不能被猜測。

三.避免在catch語句塊中做一些毫無意義的事情。

4。不要使用異常來控制進程,這樣您的程序就很難理解和維護。

5。如果有需要,記得使用最後釋放資源。

6如果您需要它,在處理異常後不要忘記清理或回滾。

異常的查找表

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結

乾貨來了!阿里工程師告訴你Python中異常處理的常用方法總結


分享到:


相關文章: