← 課程總覽

🔧 第5堂課:錯誤處理與除錯

程式學習第五堂課:Python try/except 例外處理、raise 拋出錯誤、logging 記錄、除錯技巧、安全計算機專案
含語音講解(約 60 分鐘),附互動小測驗

📖 第一階段:認識錯誤(約 20 分鐘)

1. 錯誤不可怕,它是線索

⏱ 10 分鐘

常見錯誤:SyntaxError(語法)、NameError(未定義變數)、TypeError(型態錯誤)、IndexError(索引超出)、KeyError(key 不存在)

🔍 錯誤訊息三要素:錯誤類型 + 錯誤描述 + 行號

2. try/except:優雅地處理錯誤

⏱ 15 分鐘
try:
    age = int(input("請輸入年齡: "))
    print(f"你明年 {age + 1} 歲")
except ValueError:
    print("⚠️ 請輸入數字!")

try:
    num = int(input("輸入數字: "))
    result = 100 / num
except ValueError:
    print("請輸入數字!")
except ZeroDivisionError:
    print("不能除以 0!")
finally:
    print("清理資源...")  # 無論如何都執行

📖 第二階段:除錯進階(約 20 分鐘)

3. raise + logging

⏱ 15 分鐘
def divide(a, b):
    if b == 0:
        raise ValueError("除數不能為 0!")
    return a / b

# logging:專業的記錄方式
import logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(message)s',
    handlers=[logging.FileHandler('app.log', encoding='utf-8'),
              logging.StreamHandler()]
)
logging.info("程式啟動")
logging.error("錯誤發生!")
💡 開發用 print,正式上線用 logging。可分等級、記錄時間、輸出到檔案。

📖 第三階段:實戰(約 20 分鐘)

4. 專案:安全的計算機

⏱ 15 分鐘
def safe_calculator():
    while True:
        expr = input("輸入算式(或 q 離開): ")
        if expr.lower() == 'q': break
        try:
            result = eval(expr)
            print(f"✅ 結果:{result}")
        except ZeroDivisionError:
            print("❌ 不能除以 0!")
        except (SyntaxError, NameError) as e:
            print(f"❌ 算式有誤:{e}")
        except Exception as e:
            print(f"❌ 未知錯誤:{e}")

🧪 小測驗:你學會了嗎?

5 題選擇題,選完按「交卷」看成績
第 1 / 5 題
list 索引超出範圍會觸發哪種錯誤?
第 2 / 5 題
try/except 的主要目的是?
第 3 / 5 題
finally 區塊什麼時候執行?
第 4 / 5 題
raise ValueError("錯誤") 的作用?
第 5 / 5 題
logging 比 print() 好的原因?
你的得分
0/5

🎯 第5堂課,你學會了什麼?

認識錯誤try/exceptraiselogging安全計算機

優秀的程式能承受混亂的現實世界——使用者亂打、檔案不見、網路斷線,都能從容應對。

→ 前往第6堂課