1. 程式人生 > 其它 >一木.溪橋學Python-14 異常捕獲

一木.溪橋學Python-14 異常捕獲

技術標籤: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!