iT邦幫忙

2026 iThome 鐵人賽

DAY 16
0
佛心分享-IT 人自學之術

當 Python 初學者遇到 AI:30 天人機協作學習手記系列 第 16 篇

[Day 16] 進階第二關:程式當機救星!用 try-except 優雅地接住錯誤 (例外處理)

  • 分享至 

  • xImage
  •  

今日對話:如何讓程式變成打不死的蟑螂?

我的 Prompt(提示詞):

「我的程式常常因為使用者亂輸入,或是除以零等狀況而崩潰閃退。請用白話文教我 Python 的例外處理機制是什麼?另外,如果我想自己規定某種狀況也算錯誤(例如規定不能輸入負數),該怎麼寫?」

AI 導師的建議與拆解

AI 導師給了一個非常生動的比喻:例外處理就像是替程式安排特技替身與安全網!

它幫我把語法拆解成四個關鍵字:

  1. try(嘗試):危險動作區。把可能發生錯誤、有風險的程式碼放在這裡。
  2. except(例外):安全網。如果 try 裡面的程式真的出錯了,就會立刻跳來這裡執行,程式不會崩潰。你可以針對不同的錯誤(如 ValueError 數值錯誤、ZeroDivisionError 除零錯誤)設定不同的安全網。
  3. finally(最後):善後清潔隊。不管有沒有發生錯誤,最後都一定會執行的區塊(通常用來關閉檔案或中斷連線)。
  4. raise(拋出):裁判吹哨。當遇到邏輯上不合理(但 Python 語法沒錯)的狀況時,我們可以自己主動丟出一個錯誤。

實作筆記與驗證

我打開 VS Code 建立 day16.py檔案,寫了一個「年齡計算機」來測試這套防禦機制:

python
print("歡迎使用年齡計算機!")

try:
# --- 危險動作區 ---
age_str = input("請輸入您的年齡(請輸入整數):")
age = int(age_str) # 如果使用者輸入 "abc",這裡會觸發 ValueError

#示範自訂錯誤規則 (raise)
if age < 0:
raise Exception("年齡怎麼可能是負數啦!你穿越來的嗎?")
elif age > 150:
raise Exception("超過 150 歲!?您確定沒有打錯嗎?")

print(f"驗證通過!您明年就 {age + 1} 歲了。")

#--- 安全網區 ---
except ValueError:
# 專門接住 int() 轉型失敗的錯誤
print("❌ [錯誤] 請不要輸入中英文字母或小數點,只能輸入阿拉伯數字!")

except Exception as e:
# 接住上面用 raise 丟出來的自訂錯誤,或者其他未知的錯誤
#變數 e 會捕捉到錯誤的詳細訊息
print(f"⚠️ [警告] {e}")

#--- 善後清潔隊 ---
finally:
print("不管剛剛有沒有報錯,這句一定會印出來:計算機服務結束!")

print("✅ 程式平安執行到最後一行,沒有閃退!")

今日小結

有了 try / except 護體,我們的程式已經非常強壯了。以後只要遇到牽涉到「使用者輸入」或「讀取外部檔案」等不確定因素,就有這個非常好的解決辦法!


上一篇
[Day 15] 進階第一關:一行抵三行的魔法!Python 推導式 (Comprehension
下一篇
[Day 17] 進階第三關:別再複製貼上了!用 def 把程式碼打包成樂高積木
系列文
當 Python 初學者遇到 AI:30 天人機協作學習手記 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言