Python 初學者的 try except 策略 – 用例外處理輕鬆進行除錯!
如果剛開始學習 Python,當你遇到 try except
語句時,可能會感到困惑。"我需要記住什麼類別名稱?", "我什麼時候該使用這個?" 這樣的疑惑可能會出現。在這篇文章中,我們將逐步解釋 Python 例外處理 的核心概念,以及 初學者的 try except 策略。
為什麼 Python 例外處理非常重要呢?
在執行程式碼時,它不總是按預期工作。使用者可能會輸入錯誤的數據,或者檔案不存在,或是網路中斷… 如果在這種情況下程式直接停止,使用者的體驗就會受到影響。
這就是 Python 的例外處理 (try except) 所必需的。
例外處理的目的是唯一的:即使出現錯誤,程式也能安全地繼續運行。
try except 是怎樣的呢?
try:
# 可能會出現問題的程式碼
except 例外類別 as e:
# 問題出現時要做的事
例如:
try:
result = 10 / 0
except ZeroDivisionError as e:
print("不能除以0:", e)
這裡的關鍵是 ZeroDivisionError
這個 例外類別。這個類別正是標示出錯誤類型的'名稱標籤'。
什麼是例外類別,必須記住嗎?
許多 Python 初學者會問這個問題:
"這麼多例外類別,我都需要記住嗎?"
正確答案是 不需要!
實際的開發者也不會記住所有的例外類別。相反,只需對 幾個常用的例外類別熟悉,對於其他的則是在問題發生時 查看錯誤訊息來使用。
例如:
FileNotFoundError: [Errno 2] 沒有這個檔案或目錄: 'none.txt'
那麼接下來可以這樣寫:
except FileNotFoundError:
就是這樣用。
常用的 Python 例外類別 TOP 7
例外類別 | 什麼時候會發生? |
---|---|
ValueError |
當值不正確時 |
TypeError |
當類型不匹配時 |
IndexError |
當列表範圍越界時 |
KeyError |
當字典中不存在鍵時 |
ZeroDivisionError |
當除以0時 |
FileNotFoundError |
當檔案不存在時 |
Exception |
所有一般錯誤的父類 |
只要掌握到這些,大多數 Python 例外處理的情況都能應對。
try except, 初學者策略,這樣熟悉!
- 如果不清楚,先用 Exception 包起來。
try:
dangerous_code()
except Exception as e:
print("出現問題:", e)
-
根據錯誤訊息具體化所需的例外類別。
-
相信 IDE(程式編輯器)的自動完成功能。 大多數會給出推薦。
-
遇到同樣的問題多次,會自然熟悉。
例外處理是除錯的朋友
Python 例外處理不僅僅是防止錯誤的工具,更是 追踪錯誤和查找原因的強大除錯工具。
例外訊息通常會像這樣顯示:
Traceback (most recent call last):
File "main.py", line 2, in <module>
x = 10 / 0
ZeroDivisionError: division by zero
透過這些資訊,可以準確知道檔案名稱、行號和錯誤類型。因此,如果好好運用例外處理,除錯也會變得輕鬆。
其他例外類別 – StopIteration
StopIteration
是當可迭代對象(iterator)沒有更多項目要返回時發生的例外。在一般的 for
循環中,這會自動處理,因此無需過度關注,但當使用 next()
函數時,有時需要手動處理。
例如:
it = iter([1, 2])
print(next(it)) # 1
print(next(it)) # 2
print(next(it)) # 發生 StopIteration
或者在以下代碼中:
try:
category = next(cat for cat in all_categories if cat.slug == category_slug)
except StopIteration:
pass # 不做任何事情
在這種情況下,如果沒有擁有該 slug 的類別,就不做任何事情,然後繼續。這可視為為了不打斷程式流程而採取的最基本防禦。
總結 – Python 例外處理,一開始會有些困難,但很快就會熟悉
一開始不需要記住所有的例外類別,也不需要完美的例外處理。相反,請開始養成 意識到問題情況、用 try except
包起來,並分析錯誤訊息的習慣。
Python 例外處理 使程式更加健壯,並能更輕鬆地找到後來的問題。對於初學者來說,與其追求完美,不如 在實際操作中的生存能力 更為重要。try except
將會是你邁出的第一步。
在下篇文章中,我們將介紹 try except else finally
結構的擴展例外處理流程!😊
Add a New Comment