嘗試在 Python 中使用

Mondo 科技 更新 2024-01-29

try 語句是 Python 中處理異常的重要語句,它的作用是在異常發生時處理程式,使程式能夠繼續執行而不是完全停止。 正確使用 try 語句是編寫可靠 Python 程式的關鍵。

本文將讓你全面了解 try 的語法用法和工作原理,以及 except、else 的用法,最後是 try 經常使用它的語句。 通過詳細的案例,您將能夠熟練掌握嘗試的各種用法,並將它們熟練地應用到實際的 python 中。

try 語句的基本語法結構為:

如果 try 塊在執行過程中發生異常,則 try 塊的剩餘 ** 不會繼續執行,而是會直接跳轉到 except 塊,except 塊會捕捉到異常並執行 except 塊中的 **。

使用這種機制,我們可以處理 try 塊中的異常,以便程式不會因異常而終止。 例如:

在上面的示例中,我們在 try 塊中獲取使用者輸入並將其轉換為整數,但如果使用者輸入其他內容而不是整數,int() 將產生 valueerror 異常。 在這種情況下,try 中的另乙個 ** 不會繼續執行,直譯器會直接跳轉到 except 塊進行處理。

除了 valueerror 之外,try 塊中的 ** 還會產生各種其他異常事件。 try-except 可以捕獲各種不同的異常。

try-except 工作流程的簡要總結:

在 try 塊中執行 **。

如果 try 塊中沒有發生異常,則在執行完 try 塊的所有 ** 後,程式繼續向下執行。

如果在 try 塊中生成異常,則不會執行 try 塊的剩餘 **。 直譯器查詢相關的 except 塊,在其中執行 **,然後繼續向下。

通過這種機制,我們可以處理 try 塊中的異常,讓程式繼續執行,而不是因為異常而完全崩潰。 這使我們的程式更加強大和可靠。

在上面的示例中,我們使用 except 塊進行了簡單的異常處理。 但實際上還有很多事情要做。

except 語句用於定義處理 try 語句中的異常的過程。 基本語法如下:

當 try 部分發生 exceptionType 異常時,將執行 except 塊。 我們可以通過指定不同的異常型別來處理不同型別的異常。 例如:

如果在開啟檔案時發生 ioerror(例如檔案不存在),則將執行 print('Unable to open the file')如果 valueerror 型別異常(檔案包含無法轉換為整數的奇怪字元),則執行列印(“檔案包含奇怪字元”)。

如果未捕獲到匹配的異常,則指令碼將停止,就好像 try 語句不存在一樣,並報告錯誤。

我們還可以使用 except:,它等價於 except exception:,而無需指定異常型別

一般來說,對於不同的處理方式,需要區分不同型別的例外。 除非您不關心異常詳細資訊,否則您只想簡單地捕獲所有異常。

指定多個 except 塊可以分別處理不同的異常

當匹配多個 except 語句時,從上到下匹配異常,一旦匹配到異常,則執行對應的 except 塊並彈出整個 try 語句(後續的 except 將不被判定)。

所以通常把一般的例外放在最後:

不要忘記,預設情況下,即使是由 except 塊處理的異常也不會在將來繼續執行。 除非使用 try-else 語句,否則請參見下文。

在 try-except 語句中新增 else 語句,以指定在不發生異常時執行的 **:要執行

在上面的示例中,如果輸入整數,則將執行 try 塊中的兩行 **,然後是 print(else 語句中的 'done')。

如果輸入不是整數,導致 valueerror 異常,則 except 塊將列印“not an integer”,而 else 塊不會執行。

else 語句允許我們在 ** 正常執行時進行一些處理,或者清理列印輸出等操作。

無論是否發生異常,都會執行最後乙個子句。 用於釋放在 try 塊中開啟的資源。

無論開啟檔案時是否發生異常,檔案物件 f 最終都會顯式關閉,這比依賴 Python 的 GC** 更明確。

最後通常用於釋放外部資源。 例如關閉開啟的檔案、斷開網路連線等。

try 語句也可以巢狀,外部 except 塊可以捕獲內部 try 語句的異常。

這在某些情況下可能很有用,因為可以通過在外層新增另一層 try-except 來區分內部 try 生成的異常。

但是,多層巢狀的try語句也會使可讀性變差,包括過多的邏輯,在實踐中應避免過度巢狀。

有時我們只想記錄一些低階異常,我們不想因為這些異常而破壞整個程式。 此時,您可以選擇在 except 塊中捕獲指定的異常後不執行任何操作:

如上所述,通過捕獲但傳遞某些異常,我們可以防止這些“低階”異常影響系統的執行。

這在某些情況下很有用,例如,當特定的第三方模組有乙個已知的 bug 會引發奇怪的異常時,但如果未呼叫該模組,則整個專案將不會執行。 此時,我們可以考慮使用 try-except 來捕獲異常,以防止異常影響主程式。

當然,最好解決異常的根本原因。 從長遠來看,試圖掩蓋這樣的異常情況並不是一件好事。

通過將異常變數的名稱繫結到 except,我們可以捕獲 try 中生成的異常錯誤物件,從而通過這個異常物件獲取異常的詳細資訊,例如錯誤資訊等

這樣,我們就可以通過 except 塊中的異常例項 ex 獲取更豐富的異常資訊,用於後續處理。

sys 模組sys.excepthook可用於向所有未處理的異常新增 ** 函式。

我們可以完成設定sys.excepthook要為所有未處理的異常實現自定義處理邏輯,請執行以下操作:

這有助於全域性異常處理。 sys 模組中還有一些其他與異常相關的工具,例如用於丟擲異常的工具sys.exit()並檢查異常引數sys.exc_info()等。

異常處理有很多樣板,如果每個函式只寫一次會很麻煩。 我們可以用 python 裝飾器來簡化這一點

這樣,我們就可以在函式中新增乙個@catch異常裝飾器,去掉函式中重複的異常處理樣板,讓核心業務邏輯更加簡潔。

異常裝飾器函式是一種常見的 Python 開發模式,可大大減少重複。 如果你的專案使用 Flask Django 框架,它們還內建了乙個模組化的異常裝飾器來簡化異常處理。

由於 try except 語句的異常處理機制,使用 try except 必然會帶來一定的效能開銷。

主要體現在:

即使沒有異常,try except 塊也會略微增加函式執行時間。

當發生異常時,由於執行跳轉和建立異常物件,處理時間會更長。

通常,微秒範圍內這種略高的開銷可以忽略不計,但如果您有嚴格的效能要求或在效能敏感的環境中執行,那麼這個開銷值得關注。

為了量化 try except 的效能影響,我們可以簡單地編寫幾個指標示例:

無異常:

如您所見,即使沒有例外,新增乙個空的 try except 塊也會增加大約 2 倍的額外執行時間。

同樣,在異常的情況下,try except 的開銷會進一步增加:

存在異常:

可以看出,使用 try 顯著增加了異常處理時間,但直接執行的異常沒有 try 除外。

當然,微秒級的開銷是可以接受的,為了使程式健壯,這是值得的。 但是,如果您的應用程式對效能非常關鍵,並且需要頻繁使用 try except,則這些開銷可能會增加整體運營效率。

在這種情況下,您可以通過一些優化措施來減少開銷,例如:

除非必要,否則請使用 try,不要新增它。

將多個 try except 合併為乙個語句。

當您不需要獲取異常詳細資訊時,可以避免建立異常例項。

最後是塊,而不是其他塊,在沒有異常的情況下也需要執行。

等一會。 正確使用 try except 需要在健壯性和執行效率之間取得平衡。

到目前為止,我們已經全面介紹了 try 的語法和除 Python 之外的各種詳細用法。 它的工作原理是捕獲和處理程式執行期間可能發生的異常和錯誤,防止程式崩潰並允許**繼續。

主要內容回顧:

try except 的句法結構和異常捕獲機制。

使用 except 塊處理不同型別的異常。

else 語句在沒有異常時執行。

最後語句釋放資源。

通過異常例項獲取有關異常的詳細資訊。

使用 sysExcepthook 自定義全域性異常處理。

使用修飾器簡化模板的例外情況。

嘗試 Except、Performance Overhead 等。

通過靈活組合 try except else finally 語句,我們可以編寫出非常健壯和容錯的 Python。

希望本文能幫助您以簡單的方式了解 try 的所有用法,並在 Python 程式設計中正確、熟練地使用它們。

#python#

相關問題答案

    OR 在 Python 中的用法

    Python 中的 OR 是乙個邏輯運算子,用於確定兩個條件中是否至少有乙個為真。在這篇文章中,我將詳細解釋 OR 在 Python 中的用法,並提供一些示例來說明它是如何工作的。在 Python 中,OR 運算子的語法如下 python expr or expr 計算 OR 運算子的規則如下 如果...

    chr 函式在 Python 中的用法和應用

    在 Python 程式語言中,chr 函式是常用的內建函式之一。它將Unicode編碼轉換為相應的字元,在字串處理 編碼轉換和字元操作中起著重要作用。chr 函式是 Python 中的內建函式,可將 Unicode 編碼轉換為相應的字元。其基本語法如下 chr i 其中 i 是要轉換的 Unicod...

    python 中 zip 的用法

    大家好!今天我們將討論 python 中的 zip 函式。這個功能非常實用,它。是 Python 中的乙個內建函式,可以幫助我們同時迭代多個可迭代物件,將它們打包到元組列表中。首先,讓我們看一下 zip 函式的語法。其基本語法如下 zip iterable,iterable,其中,iterable ...

    python佔位符的用法

    Python是一種廣泛使用的高階程式語言,由於其強大的功能和靈活的語法,從Web開發到資料分析,再到機器習和人工智慧,被廣泛應用於各個領域。在 Python 中,佔位符是乙個重要的程式設計概念,用於佔據字串和格式化輸出中的特定位置,將變數值插入這些位置。本文將深入探討 Python 佔位符的使用,包...

    Python 中的列印用法

    Python 中的 print 函式是乙個非常常見的函式,用於將資訊輸出到控制台。它非常強大,可以輸出各種型別的資料,您可以通過格式化字串來控制輸出的格式。print 函式的基本語法如下 python print value,sep end file sys.stdout,flush false v...