一木.溪橋學Python-14 異常捕獲
阿新 • • 發佈:2021-02-02
技術標籤:Python學習之路python
一木.溪橋 在Logic Education跟Amy學Python
邏輯教育 :https://logicedu.ke.qq.com
12期:Python基礎課
一木.溪橋學Python-14:異常捕獲
日期:2021年1月19日
- 本文內容:來至Amy老師的語雀分享!在此表示感謝!
學習目標:
- 異常
- 異常捕獲
學習內容:
異常
介紹
-
當Python無法正常處理程式時就會發生一個異常,會影響程式的正常執行。
異常也是Python物件,表示一個錯誤。
異常捕獲
- 當Python指令碼有發生異常的可能時,就需要捕獲異常,避免程式終止執行。
語法
try:
正常程式執行此塊程式碼
except:
丟擲錯誤執行此程式碼塊
練習
- 將以下程式碼進行異常捕獲
- 當代碼異常時,將ipt賦值為1
ipt = input("請輸入:")
ipt = float(ipt)
print(ipt)
- 程式碼如下:
try:
# 正常程式時執行程式碼塊
ipt = input("請輸入:")
ipt = float(ipt)
print(ipt)
except:
# 異常程式時執行程式碼塊
ipt = 1
print(ipt)
異常型別捕獲
-
但是僅僅使用以上異常捕獲,雖然不會報錯終止程式。但是無法記錄下具體異常種類。如需記錄下具體異常種類,則需要捕獲該具體異常。
-
語法:
try:
pass
except 當前異常物件 as e: # e = 當前異常物件
print(e)
- 練習
- 捕獲以下程式碼的異常型別並輸出
li = [1, 2, 3]
li[3] # IndexError
- 程式碼如下:
try: li = [1, 2, 3] li[3] # IndexError except IndexError as e: print(e) # list index out of range
- 需要注意的是,該捕獲方式僅能捕獲IndexError這一類異常。那麼實際上,這種細分的異常種類有很多,可以通過其共同父類Exception捕獲輸出。
try:
# li = [1,2,3]
# li[3]
int('a')
except Exception as e:
print(e) # invalid literal for int() with base 10: 'a'
try-except-else
- 如果丟擲異常執行except內部程式碼
- 如果程式正常執行else內部程式碼
try-finally
不管程式有無發生異常,都將執行finally內部程式碼。
主動觸發異常
在實際開發中,在程式不滿足某條件時,通常會主動丟擲異常。
- 語法
raise Exception()
-
練習
判斷煎餅熟了沒,當烹飪時間小於5時,則主動觸發沒熟異常;否則熟了。
def test(level):
if level<5:
raise Exception("沒熟沒熟")
try:
test(5)
except Exception as e:
print(e)
else:
print("熟了 請吃")
定義異常
-
當需要自定義滿足一些規則時,就可以自定義異常。
-
自定義異常通過建立一個新的異常類,自定義名字與內容,並且需要繼承Exception類實現。
-
練習
-
自定義OldAmyError異常類
class OldAmyError(Exception):
def __init__(self,msg):
self.message = msg
def __str__(self):
return self.message
# e = OldAmyError("我錯了")
# print(e)
try:
raise OldAmyError("我錯了")
except OldAmyError as e:
print(e)
斷言
-
assert斷言用於判斷一個表示式,當表示式條件為False時觸發斷言異常AssertionError。一般用於強制使用者服從。
-
當表示式條件不成立時:False,直接丟擲異常,AssertionError。
-
當表示式條件成立時:Ture,執行下面的語句,但失去assert的意義。
-
注意,斷言用於強制使用者服從,可捕獲,但是一般不捕獲。
-
語法:
assert 斷言
print("1"*10) # 輸出:1111111111
assert "2.0" == 2 # False ,一般用於強制使用者服從
print("1"*10) # AssertionError
End !
Best wishes for you!