iT邦幫忙

2024 iThome 鐵人賽

DAY 23
1
自我挑戰組

每日挑戰:從零開始的 Python 學習之旅系列 第 23

【Day 23】錯誤和例外狀況篇 - 續集

  • 分享至 

  • xImage
  •  

Hi 大家好,

今天要開始介紹Python中的錯誤和例外狀況篇之續集,那我們開始吧!

在上一篇寫到例外處理使用到 tryexcept,除此之外還有幾個常見的方式

使用 tryexceptelse

  • 這種捕捉的方式是用來處理程式碼中可能會發生的例外,如果沒有例外發生就會執行else下的內容
    • try 區塊中執行可能引發例外的代碼。
    • except 區塊用來捕獲特定的例外並進行處理。
    • else 區塊僅在沒有發生任何例外時執行。
def divide_numbers(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        print("不能除以零")
    else:
        print(f"結果是 {result}")

divide_numbers(10, 2)  # 沒有錯誤的輸出結果:結果是 5.0
divide_numbers(10, 0)  # 發生錯誤的輸出結果:不能除以零
PS D:\Project\practice> python hi.py
結果是 5.0
不能除以零
PS D:\Project\practice>

使用 tryfinally

  • try 和 finally 的結合通常用於確保某些操作是一定會執行,無論是否發生例外
try:
    result = 10 / 2
except ZeroDivisionError:
    print("不可除0")
else:
    print("沒例外就會執行")
finally:
    print("不管如何最後都會執行")
    
print("有無例外都會繼續執行後面流程")
PS D:\Project\practice> python hi.py
沒例外就會執行
不管如何最後都會執行
有無例外都會繼續執行後面流程
PS D:\Project\practice>

多個 except 區塊

  • 當你的代碼可能引發多種類型的例外時,可以考慮使用多個 except 區塊來針對不同的例外進行不同的訊息顯示和處理
  • 每個 except 區塊都處理一種特定的例外類型
  • 這樣可以讓不同的例外情況有各自的處理邏輯
def handle_input(value):
    try:
        number = int(value)
        result = 10 / number
    except ValueError:
        print("輸入值必須是數字")
    except ZeroDivisionError:
        print("不能除以零")
    else:
        print(f"結果是 {result}")

handle_input("abc")
handle_input("0")
handle_input("2") 
PS D:\Project\practice> python hi.py
輸入值必須是數字
不能除以零
結果是 5.0
PS D:\Project\practice>

捕獲所有例外(Catch-All Exceptions)

  • 有時候你可能不知道要捕捉那些例外,就可以使用一個未指定例外類型的 Exception 來實現
  • 這個 except 區塊可以捕獲所有類型的例外,可以把Exception 設定一個別名e來使用
def safe_divide(a, b):
    try:
        result = a / b
    except Exception as e:
        print(f"發生錯誤:{e}")
    else:
        print(f"結果是 {result}")

safe_divide(10, 0)
safe_divide(10, 'a')
PS D:\Project\practice> python hi.py
發生錯誤:division by zero
發生錯誤:unsupported operand type(s) for /: 'int' and 'str'
PS D:\Project\practice>

那今天就介紹到這裡,我們明天見~


上一篇
【Day 22】錯誤和例外狀況篇 - 續集
下一篇
【Day 24】檔案處理篇
系列文
每日挑戰:從零開始的 Python 學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言