天天看點

Python異常處理

異常處理: Python程式運作文法出錯會有異常抛出不處理異常會導緻程式終止

Python異常處理

 示例:使用者輸入一個整數轉換成int型,如果使用者輸入的不是數字而是其他例如字母等則會出現異常

  不使用異常處理代碼的處理方法

#cat 異常處理.py
abc = input("請輸入一個數字")

if not abc.isdigit():   # 判斷是否數字,如果不是則退出
    print("你到底知不知道什麼是數字")
    exit()
else:   # 否則轉換成int型
    abc = int(abc)
    print(abc)
      

  使用異常處理代碼try

# cat 異常處理.py
try:
    abc = int(abc)
except ValueError:
    print("你到底知不知道什麼是數字")
print(abc)
      

  try語句執行規則

  1,首先,按順序執行try字句

  2,如果沒有異常發生,則忽略except子句,try子句執行後結束

  3,如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分被忽略

  4,如果異常的類型和except之後的名稱相符,你們對應的except子句将被執行。最後執行try語句自豪的代碼

  5,如果一個異常沒有與任何except比對,那麼整個異常将會報錯并終止程式。

  示例

# cat 異常處理2.py
list1 = [1, 2, 3]
try:
    print(list1[3]) # 執行這一句,正常就直接執行,不管後面的錯誤;如果不正常,則要繼續往下看,本次因為沒有這個元素,執行會報IndexError: list index out of range 錯誤
except TypeError:   # 捕獲異常,如果是TypeError錯誤則執行,列印error1,如果不是則繼續往下看
    print("error1")
except IndexError as err:   # 如果是IndexError則執行列印error2,并且把異常輸出列印
    print("error2:", err)
print("haha")   # 異常沒有被捕捉到,會正常執行,如果被捕捉到,會報自定義錯誤,并且可以繼續執行此代碼
      

  輸出為

error2: list index out of range
haha
      

  

# cat 異常處理3.py
list1 = [1, 2, 3]
try:    
    print(list1[3]) # 這是一個IndexError
except TypeError as err:    # 沒有捕捉到對應錯誤類型
    print("error1", err)
except SyntaxError as err:  # 沒有捕捉到對應錯誤類型
    print("error2", err)
except Exception as err:    # Exception代表所有錯誤異常
    print("error3", err)
      

  finally始終執行

try:
    abc = int(abc)
except ValueError:
    print("你到底知不知道什麼是數字")
finally:
    print("始終執行")    # 不管是否出現異常始終都會執行finally内語句
print(abc)