目錄
先決條件
目標
解釋錯誤和異常
異常
內建異常
ValueError
TypeError
IndexError
KeyError
自訂異常
處理異常
使用 try-except 語句
使用一個 except 語句處理多個異常類別
通配符異常類別
使用 finally 語句
建立自訂異常類別
首頁 後端開發 Python教學 Python 中的錯誤處理:最佳實踐。探索如何有效處理異常

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

Jan 12, 2025 pm 10:09 PM

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24
Python vs.C:申請和用例 Python vs.C:申請和用例 Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

您可以在2小時內學到多少python? 您可以在2小時內學到多少python? Apr 09, 2025 pm 04:33 PM

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

2小時的Python計劃:一種現實的方法 2小時的Python計劃:一種現實的方法 Apr 11, 2025 am 12:04 AM

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python:遊戲,Guis等 Python:遊戲,Guis等 Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python與C:學習曲線和易用性 Python與C:學習曲線和易用性 Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

Python和時間:充分利用您的學習時間 Python和時間:充分利用您的學習時間 Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python:探索其主要應用程序 Python:探索其主要應用程序 Apr 10, 2025 am 09:41 AM

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

Python:自動化,腳本和任務管理 Python:自動化,腳本和任務管理 Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

See all articles