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

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

摘要:

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

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

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

先決條件

本文適合:

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

目標

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

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

解釋錯誤和異常

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

BaseException

錯誤

SyntaxError

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

name = “Austin”;
print(name)

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

IndentationError這會導致

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

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

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

active = True
if (active):
print(“The user is active”)

異常

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

內建異常

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

ValueError

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

if (active):
    print(“The user is active”)

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

def str_num(num_string):
    return(int(string))

TypeError

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

print(str_num(“123”)) #works perfectly
print(str_num(“abc”)) #raises a ValueError

這會引發 TypeError

IndexError

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

def addition(num1, num2):
    return num1 + num2
# calling the function
addition(5, A)

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

KeyError

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

my_list = [“dog”, “cat”]
my_list[2]

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

自訂異常

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

處理異常

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

使用 try-except 語句

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

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

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

name = “Austin”;
print(name)

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

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

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

active = True
if (active):
print(“The user is active”)

通配符異常類別

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

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

if (active):
    print(“The user is active”)

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

使用 finally 語句

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

def str_num(num_string):
    return(int(string))

建立自訂異常類別

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

print(str_num(“123”)) #works perfectly
print(str_num(“abc”)) #raises a ValueError

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

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

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

  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
如何解決Linux終端中查看Python版本時遇到的權限問題?如何解決Linux終端中查看Python版本時遇到的權限問題?Apr 01, 2025 pm 05:09 PM

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

我如何使用美麗的湯來解析HTML?我如何使用美麗的湯來解析HTML?Mar 10, 2025 pm 06:54 PM

本文解釋瞭如何使用美麗的湯庫來解析html。 它詳細介紹了常見方法,例如find(),find_all(),select()和get_text(),以用於數據提取,處理不同的HTML結構和錯誤以及替代方案(SEL)

如何使用TensorFlow或Pytorch進行深度學習?如何使用TensorFlow或Pytorch進行深度學習?Mar 10, 2025 pm 06:52 PM

本文比較了Tensorflow和Pytorch的深度學習。 它詳細介紹了所涉及的步驟:數據準備,模型構建,培訓,評估和部署。 框架之間的關鍵差異,特別是關於計算刻度的

Python中的數學模塊:統計Python中的數學模塊:統計Mar 09, 2025 am 11:40 AM

Python的statistics模塊提供強大的數據統計分析功能,幫助我們快速理解數據整體特徵,例如生物統計學和商業分析等領域。無需逐個查看數據點,只需查看均值或方差等統計量,即可發現原始數據中可能被忽略的趨勢和特徵,並更輕鬆、有效地比較大型數據集。 本教程將介紹如何計算平均值和衡量數據集的離散程度。除非另有說明,本模塊中的所有函數都支持使用mean()函數計算平均值,而非簡單的求和平均。 也可使用浮點數。 import random import statistics from fracti

哪些流行的Python庫及其用途?哪些流行的Python庫及其用途?Mar 21, 2025 pm 06:46 PM

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途

如何使用Python創建命令行接口(CLI)?如何使用Python創建命令行接口(CLI)?Mar 10, 2025 pm 06:48 PM

本文指導Python開發人員構建命令行界面(CLIS)。 它使用Typer,Click和ArgParse等庫詳細介紹,強調輸入/輸出處理,並促進用戶友好的設計模式,以提高CLI可用性。

在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中?在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中?Apr 01, 2025 pm 11:15 PM

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

解釋Python中虛擬環境的目的。解釋Python中虛擬環境的目的。Mar 19, 2025 pm 02:27 PM

文章討論了虛擬環境在Python中的作用,重點是管理項目依賴性並避免衝突。它詳細介紹了他們在改善項目管理和減少依賴問題方面的創建,激活和利益。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。