iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
生成式 AI

一塊一塊拼湊的 AI 樂高世界之旅系列 第 9

Day 9:錯誤與例外處理(try-except)

  • 分享至 

  • xImage
  •  

前言

在前天中,我們的程式多半假設「一切都會順利」。
但是現實世界中,程式很常遇到「突發狀況」:

  • 除以零
  • 輸入錯誤的資料
  • 檔案找不到
  • 網路連線失敗

如果沒有處理這些狀況,程式就會「直接掛掉」。
為了讓程式更穩定,我們需要學會 錯誤與例外處理(Exception Handling)

生活比喻:
就像你要搭火車,如果火車誤點,系統應該提示「改搭下一班」,而不是整個車站停擺。


1. 基本語法:try-except

try:
    x = 10 / 0
except ZeroDivisionError:
    print("發生錯誤:不能除以零")
  • try:嘗試執行可能會出錯的程式碼
  • except:捕捉錯誤,並執行對應的處理

2. 捕捉多種錯誤

try:
    num = int(input("請輸入一個數字:"))
    result = 100 / num
    print("計算結果:", result)
except ValueError:
    print("發生錯誤:輸入的不是數字")
except ZeroDivisionError:
    print("發生錯誤:不能除以零")

3. 使用 elsefinally

try:
    name = "Jr"
    score = int(input(f"{name} 請輸入分數:"))
except ValueError:
    print("請輸入有效的數字")
else:
    print(f"{name} 的分數是 {score}")
finally:
    print("程式結束,感謝使用!")

4. 自訂例外

def check_age(age):
    if age < 0:
        raise ValueError("年齡不能是負數")
    return age

try:
    print(check_age(-5))
except ValueError as e:
    print("錯誤:", e)

https://ithelp.ithome.com.tw/upload/images/20250923/20161224Qu41v0YNBq.png


5. 常見錯誤對照表

錯誤類型 常見情境
ValueError 資料型別轉換錯誤(int("abc")
ZeroDivisionError 除以零
FileNotFoundError 開啟不存在的檔案
IndexError list 索引超出範圍
KeyError dict 查不到 key

6. 綜合範例:成績系統

def get_score():
    try:
        score = int(input("請輸入分數:"))
        if not (0 <= score <= 100):
            raise ValueError("分數必須在 0 ~ 100 之間")
        return score
    except ValueError as e:
        print("錯誤:", e)
        return None

Jr_score = get_score()
if Jr_score is not None:
    print(f"Jr 的成績是 {Jr_score}")

生活化比喻小結
程式中的錯誤就像搭車時的突發狀況:火車誤點、客運塞車、甚至道路封閉。
如果沒有備案,就只能乾等,行程全被打亂。
但有了「例外處理」就像規劃好替代路線:改搭下一班車、換走別條路,雖然過程有波折,但最終仍能抵達目的地。


上一篇
Day 8:Async 非同步程式設計
下一篇
Day 10:Flask 網頁後端入門
系列文
一塊一塊拼湊的 AI 樂高世界之旅11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言