首頁 >後端開發 >Python教學 >Python 中的錯誤處理:最佳實踐。探索如何有效處理異常

Python 中的錯誤處理:最佳實踐。探索如何有效處理異常

Patricia Arquette
Patricia Arquette原創
2025-01-12 22:09:43784瀏覽

Error Handling in Python: Best Practices. Explore how to handle exceptions effectively

摘要:

程式錯誤是不可恢復的;當程式遇到錯誤時,它會立即退出或崩潰。

優秀的程式設計師會確保他們的程式碼或軟體能夠優雅地處理軟體使用過程中可能出現的錯誤/異常,而不會崩潰或產生不良結果。想像一下,為金融機構編寫僅接受數字輸入的軟體,如果用戶輸入了字母而不是數字進行算術運算,這通常會引發錯誤,並且軟體會因為一個用戶而崩潰,如果沒有任何適當的機制來處理錯誤的話。這絕對不是一件好事——它對業務不利,可能導致客戶感到沮喪,而且有人可能會因為不稱職而失去工作。

在本文中,我們將學習如何以最佳方式處理程式碼中由於使用者互動而可能出現的錯誤。敬請關注。

先決條件

本文適合:

  • 尋求學習如何在程式碼中處理異常的 Python 軟體開發人員。
  • 已經熟悉 Python 並希望學習 Python 中錯誤處理概念的人員。
  • 尋求提高 Python 錯誤處理知識的現有專業人士。

目標

通讀本文後,讀者應該能夠:

  • 清楚地理解 Python 中錯誤處理的概念及其重要性。
  • 了解自訂異常類別以及如何實作它們。
  • 理解 Python 中錯誤和異常之間的關鍵區別。

解釋錯誤和異常

錯誤異常通常可以互換使用,但它們在技術上意義不同。在Python 中,錯誤異常都是BaseException都是

BaseException

錯誤

SyntaxError

錯誤是不可恢復的;當我們的程式遇到錯誤時,它會立即退出或崩潰。即使您可能預料到錯誤,也沒有辦法以程式方式處理錯誤。下面列出了一些錯誤:

<code class="language-python">name = “Austin”;
print(name)</code>

SyntaxError這是程式設計師面臨的最常見錯誤類型之一,它發生在程式碼不遵循正確的 Python 語法時,並且可以在解析期間檢測到。對於學習者或從其他程式語言轉向 Python 的人來說,這是一個很容易出現的問題。

IndentationError這會導致

,因為在 Python 中,語句不會以分號結尾。

: 當 Python 程式碼縮排不正確時,就會發生此錯誤,並在解析程式碼時偵測到。 Python 中的縮排非常重要。它是 Python 中唯一可以定義程式碼區塊的方式,這與大多數使用花括號的語言不同。
<code class="language-python">name = “Austin”;
print(name)</code>

這段程式碼會因為縮排不當而導致錯誤。它應該是:

<code class="language-python">active = True
if (active):
print(“The user is active”)</code>

異常

Python 中的異常在運作時發生。與錯誤不同,可以以程式設計方式正確地處理或捕獲它們,以便我們的程式可以繼續運行而不會崩潰。換句話說,它們是可恢復的。以下是 Python 中一些常見的異常:

內建異常

這些類型的異常是 Python 程式語言的一部分。以下列出其中一些:

ValueError

當向函數傳遞無效參數時發生此錯誤,即使類型可能正確。

<code class="language-python">if (active):
    print(“The user is active”)</code>

從上面的程式碼片段中,如果我們向函數傳遞數字字串,它將成功轉換為數字,否則,它將產生 ValueError

<code class="language-python">def str_num(num_string):
    return(int(string))</code>

TypeError

當向函數傳遞不合適的型別參數時,就會引發此錯誤。

<code class="language-python">print(str_num(“123”)) #works perfectly
print(str_num(“abc”)) #raises a ValueError</code>

這會引發 TypeError

IndexError

當您嘗試使用錯誤索引存取清單中的值時,就會出現此錯誤。

<code class="language-python">def addition(num1, num2):
    return num1 + num2
# calling the function
addition(5, A)</code>

這會導致 IndexError,因為 my_list[2] 無法存取。

KeyError

當嘗試使用錯誤或不存在的鍵存取字典中的值時,就會引發此錯誤。

<code class="language-python">my_list = [“dog”, “cat”]
my_list[2]</code>

這會引發 KeyError。 您可以在此處找到其他內建異常。

自訂異常

自訂異常由程式設計師定義。在這裡,Python 使程式設計師能夠手動定義程式應該在執行期間檢查的條件,並在找到時引發異常。您可以透過建立一個從 Exception 類別繼承的類別來實現這一點。

處理異常

處理異常可確保我們的軟體應用程式在遇到應用程式生命週期中出現的某些錯誤時具有可預測的效能。在本節中,您將學習如何在程式設計中實現這一點。

使用 try-except 語句

try-except 語句提供了一種安全的方法來處理可能引發錯誤或異常的程式碼。 try 語句包裝有問題的程式碼或try 子句;這是很可能導致整個程式出錯的程式碼部分;當從使用者接收輸入、從檔案讀取時,這很可能會發生,僅舉幾例。

except 語句標示 except 子句的開始;這是包裝在 except 區塊中的其餘程式碼。 except 子句處理 try 區塊中引發的異常。

讓我帶您了解執行工作流程。您的Python 程式通常會執行,直到它到達包含「有問題的」程式碼的try 區塊,如果當時在try 區塊中執行程式碼時沒有可能的錯誤,它會跳過except 區塊並繼續執行程式碼庫的其餘部分。但是,如果在 try 區塊中執行程式碼時遇到錯誤,則會在建立異常物件後,控制會立即跳到 except 區塊,在該區塊中,它應該由匹配的異常類別處理。

<code class="language-python">name = “Austin”;
print(name)</code>

從上面的程式碼片段中,如果將非數值傳遞給程序,則會建立異常物件並引發 ValueError。控制立即跳到 except 區塊,在該區塊中它會掃描適當的異常類別。在這裡,ValueError 類別就足夠了。錯誤已正確處理。但是,如果找不到正確的類,則控制會移動到外部 try 區塊(如果有的話),如果仍然沒有正確處理異常,則程式會崩潰。

使用一個 except 語句處理多個異常類別

可以檢查多個異常類別並處理特定異常。如果您不確定幾個異常中的哪一個會導致程式碼執行結果,則首選這種方法。請參閱下面的程式碼片段。

<code class="language-python">active = True
if (active):
print(“The user is active”)</code>

通配符異常類別

Exception 類別是 BaseException 的直接子類別。 Exception 類別是所有非致命異常的基底類別。

大多數情況下,Exception 類別足以處理程式碼執行期間引發的多數異常。

<code class="language-python">if (active):
    print(“The user is active”)</code>

即使 Exception 類別能夠處理非致命異常,最好還是謹慎使用它。使用正確的 Exception 類,因為它更有利於調試和提高程式碼的可讀性。

使用 finally 語句

包裝在 finally 區塊中的程式碼部分無論是否發生異常都會執行。這使得它適合處理清理任務;關閉檔案和釋放記憶體資源。

<code class="language-python">def str_num(num_string):
    return(int(string))</code>

建立自訂異常類別

建立自訂異常使程式設計師能夠為軟體程式提出特定的異常。這可能包含可能對特定軟體程式的功能有害的特殊條件或極端情況。定義的自訂異常類別必須從 Exception 類別繼承。

<code class="language-python">print(str_num(“123”)) #works perfectly
print(str_num(“abc”)) #raises a ValueError</code>

上面的程式碼片段顯示如何建立和使用自訂異常。根據用例,它可以以更複雜的方式使用。

為什麼錯誤/異常處理很重要

「不要相信使用者」是軟體開發人員常見的說法,這重申了您無法完全確定使用者將如何與您的軟體應用程式互動;他們輸入的輸入類型以及您作為程式設計師在編寫應用程式時可能沒有想到的其他一些極端情況。以下解釋了正確處理錯誤/異常的一些重要原因:

  1. 防止崩潰 如果沒有異常處理,未處理的錯誤可能會導致程式突然崩潰。這可能導致資料遺失或使用者體驗不佳。 範例: 沒有異常處理:
print(10 / 0) # ZeroDivisionError: division by zero

使用異常處理:

try: print(10 / 0) except ZeroDivisionError: print("不能除以零!")

  1. 改善使用者體驗 正確處理的異常會提供有意義的錯誤訊息,而不是神秘的系統錯誤,從而使應用程式更易於使用。 範例:
try: age = int(input("輸入您的年齡:")) except ValueError: print("無效輸入!請輸入數字。")
  1. 保持應用程式穩定性 它允許應用程式即使在遇到錯誤後也能繼續運行,從而確保穩定性。 範例:
def divide(a, b): try: return a / b except ZeroDivisionError: return "不允許除以零!"

print(divide(10, 2)) # 輸出:5.0 print(divide(10, 0)) # 輸出:不允許除以零!

  1. 處理極端情況 異常處理可讓您考慮不可預測的情況,例如網路故障、檔案遺失或無效使用者輸入。 範例:
try: with open("data.txt", "r") as file: content = file.read() except FileNotFoundError: print("找不到該檔案。")
  1. 鼓勵寫簡潔的程式碼
    透過將正常邏輯與錯誤處理邏輯分開,異常處理使您的程式碼更易於閱讀、調試和維護。

  2. 促進除錯
    借助詳細的錯誤訊息和異常日誌,開發人員可以快速識別和修復程式碼中的問題。
    例:

import logging

try: result = 10 / 0 except Exception as e: logging.error("發生錯誤", exc_info=True)

  1. 對於關鍵系統至關重要 在可靠性至關重要的系統(例如銀行、醫療保健)中,異常處理對於確保安全地管理錯誤而不會導致資料損壞或遺失是必要的。

結論

在程式設計術語中,錯誤和異常大多時候可以互換使用。 Python 中錯誤和異常之間的關鍵區別在於它們如何影響我們的軟體程式。語法錯誤和縮排錯誤等錯誤會在解釋器解析程式時使程式崩潰。另一方面,如果未正確處理異常,異常會在執行時使程式崩潰。自訂異常透過使程式設計師能夠定義特定於特定軟體應用程式的異常類別來擴展錯誤處理功能。

錯誤處理對於除錯也非常重要。它可以使我們看到應用程式中發生錯誤的原因,從而為軟體維護人員提供足夠的資訊來解決問題。請務必確保在程式碼中適當地引入異常處理,以確保軟體應用程式的健全性。

感謝您的閱讀。

以上是Python 中的錯誤處理:最佳實踐。探索如何有效處理異常的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn