目次
1. 簡介:Python 中的例外處理重要性
在程式開發中,例外與錯誤是無法避免的。然而,透過適當的例外處理,可以防止程式意外終止,並向使用者提供清楚的錯誤訊息。Python 提供了一套強大的機制來處理這類例外。善用例外處理可以提高程式的可靠性,使其運行更加順暢。 例如,當使用者嘗試進行除以 0 的計算,或試圖開啟一個不存在的檔案時,如果沒有適當的例外處理,程式將會立即崩潰。然而,透過正確的例外處理,程式可以繼續執行,或向使用者顯示易於理解的錯誤訊息。Ad
2. Python 的例外處理:基本語法與流程
在 Python 中,主要使用三個關鍵字來進行例外處理:try、except 和 finally。2.1 使用 try 來偵測錯誤
try 陳述式用於包圍可能發生錯誤的程式碼。例如,對於網路操作、檔案處理或使用者輸入等可能產生錯誤的部分,應該將它們放入 try 區塊中。try:
result = 10 / 0
except:
print("發生錯誤")在上述範例中,10 / 0 會導致例外發生,因此 except 區塊會被執行。2.2 使用 except 來處理錯誤
except 陳述式用於捕捉發生的例外並進行適當的處理。透過 except,可以避免程式因錯誤而異常終止。此外,也可以根據不同的例外類型指定對應的處理方式。try:
print(a)
except NameError:
print("變數尚未定義")
except ZeroDivisionError:
print("無法執行除以 0 的運算")這樣可以針對不同的例外類型執行不同的處理方式。2.3 使用 finally 確保資源釋放
finally 區塊無論是否發生例外,皆會執行。它通常用於確保程式釋放資源,例如關閉檔案或釋放網路連線。try:
file = open("test.txt", "r")
finally:
file.close()這樣可以確保檔案操作或資料庫連線等資源管理能夠正確執行,避免資源洩漏。
3. 常見的例外類型及其處理方式
Python 提供多種內建的例外類型,以下介紹幾種常見的例外以及如何處理它們。3.1 NameError:使用未定義的變數
NameError 當程式試圖使用一個尚未定義的變數時,會拋出此例外。例如,如果變數尚未初始化,就會發生這個錯誤。try:
print(a)
except NameError:
print("變數尚未定義")3.2 TypeError:操作不相容的數據類型
TypeError 當試圖對不相容的數據類型執行操作時,就會發生。例如,試圖將字串與整數相加:try:
result = '10' + 5
except TypeError:
print("數據類型不相容")3.3 ValueError:傳遞無效的值
ValueError 當函式接收到正確類型但無效的值時,就會發生。例如,試圖將一個無法轉換為整數的字串轉換為整數:try:
number = int("abc")
except ValueError:
print("傳遞了無效的值")Ad
4. 如何處理多個例外
在 Python 中,可以在try 區塊內捕捉多種例外。可以選擇單獨處理每個例外,或者使用單一 except 區塊來捕捉多個例外。4.1 分別處理不同的例外
當不同類型的錯誤需要不同的處理方式時,可以為每種例外提供獨立的except 區塊。try:
result = 10 / 0
except ZeroDivisionError:
print("無法執行除以 0 的運算")
except NameError:
print("變數尚未定義")4.2 合併處理多種例外
當多個例外需要相同的處理方式時,可以在except 區塊中同時捕捉多種類型的例外。try:
result = 10 / '10'
except (ZeroDivisionError, TypeError):
print("發生了無效的運算")這樣可以讓程式碼更加簡潔,避免重複的錯誤處理邏輯。
5. 使用者自訂例外與 raise 陳述式
在某些情況下,內建的例外類型可能無法完全描述錯誤,因此 Python 允許開發者自訂例外類型。透過 raise 陳述式,可以手動拋出例外。5.1 使用 raise 來觸發自訂例外
例如,可以定義一個例外,當數值為負數時拋出錯誤:def check_value(value):
if value < 0:
raise ValueError("不允許輸入負數")
return value
try:
check_value(-10)
except ValueError as e:
print(e)使用 raise 可以控制錯誤的發生,並提供詳細的錯誤訊息,以利於除錯。Ad
6. 總結與最佳實踐
例外處理對於提升 Python 程式的穩定性和可維護性至關重要。以下是一些最佳實踐:- 捕捉特定的例外:避免使用過於廣泛的
Exception來捕捉所有錯誤,而是應該明確指定可能發生的例外類型,這樣可以更容易進行錯誤診斷。 - 確保資源釋放:使用
finally或with陳述式來確保開啟的文件或資料庫連線能夠被正確關閉。 - 提供清楚的錯誤訊息:當例外發生時,應提供易於理解的錯誤訊息,讓使用者能夠迅速理解問題並採取適當的行動。



