iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
自我挑戰組

待業不頹廢系列 第 27

Day 27 . 欸 今天要幹嘛 - Exception 例外

  • 分享至 

  • xImage
  •  

Exception 例外處理

"Exception"(例外)是一種程式碼在運作時出現錯誤或異常,
也許是因為語法錯誤、邏輯錯誤等等各種問題。

舉個例子:
下方程式碼為一個除法運算,當使用者把除數輸入0,
就出現發生錯誤以及出現錯誤訊息ZeroDivisionError

x = eval(input("請輸入被除數 x :"))
y = eval(input("請輸入除數 y :"))
z = x / y
print("x除以y的結果等於",z)

ZeroDivisionError

錯誤訊息又可分為多種類型:

  • ZeroDivisionError:除以零時引發的。
  • NameError:訪問未定義的變數或名稱時引發的例外。
  • TypeError:使用錯誤的數據類型或參數類型時。
  • ValueError:當嘗試使用正確類型的參數,但值不合法。
  • IndexError:訪問的列表或序列中不存在的索引時。
  • KeyError:當嘗試使用 dict 中不存在的鍵時引發的例外。
  • FileNotFoundError:打開不存在的文件時引發。
  • IOError:發生輸入/輸出錯誤時引發的例外。
  • AttributeError:訪問對象中不存在的屬性時。
  • ImportError:當導入模組或套件失敗時引發的。

接下來,我覺得講白了就是”防呆處理“
事先設想使用者不按流程走,會出問題的可能性,攔截起來做處理
效果大概會像這樣
基本架構為 try...except
更豐富的處理可以是 try...except...else...finally
當程式碼發生異常時,經過事先處理好,遇到例外時就不至於變成爆錯了。

try...except

except 可多個

try:
    x = eval(input("請輸入被除數 x :"))
    y = eval(input("請輸入除數 y :"))
    z = x / y
except ZeroDivisionError:
    print("除數不得為0")
except Exception as e1:
    print(e1.args)

效果如下圖
https://ithelp.ithome.com.tw/upload/images/20231012/20150181gXXHJ7Ymy9.png

try...except...else...finally

try:
    x = eval(input("請輸入被除數 x :"))
    y = eval(input("請輸入除數 y :"))
    z = x / y
except ZeroDivisionError:
    print("除數不得為0")
except Exception as e1:
    print(e1.args)
else:
    print("經過檢查沒有發生例外,X除以Y結果為",z)
finally:
    print("離開try...except")

效果如下圖
https://ithelp.ithome.com.tw/upload/images/20231012/20150181r5QhUuSMx8.png


上一篇
Day 26 . 欸 今天要幹嘛 - python 串列(list)
下一篇
Day 28 . 欸 今天要幹嘛 - tuple數組、set集合、dict字典
系列文
待業不頹廢30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言