【Python自學】try/except自動偵測錯誤機制的使用方法

 Python 偵錯機制try / except

try / except Python 中非常重要的錯誤處理機制,常用在使用者輸入、檔案操作時非常有用。

因為即便我們已經提醒使用者輸入條件,例如整數,他依然可能傳一個abc或者0.05給你,這時候try / except就很好用。

 

try / except 的用途

問題場景:使用者輸入「文字」,但你希望輸入「數字」,程式就會報錯中斷。

例如:

x = int(input("請輸入數字:"))

使用者輸入「abc

ValueError: invalid literal for int() with base 10: 'abc'

 

假如顯示這段代碼之後,程式就結束了,那麼使用者就要重新開啟程式。雖然這是使用者的錯誤,但是這樣體驗會很差,也於事無補。因此,我們需要有一個即便在程式錯誤的情況下也能繼續執行的代碼-try / except

 

你當然可以使用while迴圈來引導使用者輸入正確的值,但是那樣寫起來太複雜!

 

語法結構

try:

    # 嘗試執行這段程式

except 錯誤種類:

    # 如果發生錯誤,就執行這裡的程式

 

基本範例:

try:

    num = int(input("請輸入數字:"))

    print("你的數字是:", num)

except ValueError:

    print("輸入錯誤!請輸入數字喔~")

 

說明:

try 嘗試執行 int(input())

如果輸入「abc」,就會跳到 except ValueError 的程式區塊

其實邏輯跟迴圈有點像,只是while迴圈的運轉的開關是(條件符合);而try / except的運轉開關是(程式錯誤)。

 

多重錯誤處理

有時候一段程式可能有不只一種錯誤。

可以用多個 except 來處理不同狀況。

try:

    x = int(input("請輸入分母:"))

    y = 10 / x

    print("結果為:", y)

except ValueError:

    print("請輸入有效的數字!")

except ZeroDivisionError:

    print("分母不能為 0")

 

使用 else finally

else:在「沒有錯誤」時才執行

try:

    x = int(input("請輸入數字:"))

except ValueError:

    print("輸入錯誤!")

else:

    print(f"你輸入的是 {x}")

 

finally:不管有沒有錯誤,都一定會執行

 

else finally常用在「關閉檔案」、「釋放資源」。

 

try:

    file = open("data.txt", "r")

    print(file.read())

except FileNotFoundError:

    print("找不到檔案!")

finally:

    print("程式結束。")


常見錯誤類型

ValueError 輸入或轉型錯誤(如文字轉數字失敗)

ZeroDivisionError       除以零

TypeError  資料型別不符

FileNotFoundError     找不到檔案

IndexError 索引超出範圍

KeyError    字典中找不到指定的鍵

 

實戰練習題

安全除法

讓使用者輸入分子與分母,並避免「除以 0」的錯誤。

try:

    a = int(input("請輸入分子:"))

    b = int(input("請輸入分母:"))

    print("結果為:", a / b)

except ValueError:

    print("請輸入數字!")

except ZeroDivisionError:

    print("分母不能是 0")


安全輸入(整合 while

#程式開始

#複利輸入驗證邏輯

def get_positive_number(prompt, number_type=float):

    value = 0

    while value <= 0:

        try:

            value = number_type(input(prompt))

            if value <= 0:

                print("輸入值必須大於 0")

        except ValueError:

            print("請輸入正確的數字格式!")

    return value

 

amount = get_positive_number("請輸入本金:", float)

rate = get_positive_number("請輸入利率(例如 0.05):", float)

years = get_positive_number("請輸入年限:", int)

#程式結束

 

程式執行:

請輸入本金:-1

輸入值必須大於 0

請輸入本金:10000

請輸入利率(例如 0.05):0.05

請輸入年限:10

程式成功執行!

 

重點總結

try 嘗試執行可能會出錯的程式

except 捕捉錯誤並處理,不讓程式崩潰

else      若沒有錯誤,才執行這段程式

finally  無論如何都會執行(例如清理動作)

ValueError 常見錯誤類型之一,表示資料型別錯誤

 

 

 

留言

這個網誌中的熱門文章

常見的化痰粉愛克痰(小鳥粉)怎麼吃?|化痰粉成人及小孩的使用劑量|紅色與藍色比較

麻將教學懶人包|從規則到牌理的完整觀念整理(附實戰心得)

麻將新手必看!不知道聽什麼牌怎麼辦?超多種實戰聽牌範例,教你怎麼判斷胡牌機會