python 【異常的捕獲以及拋出】

今天來看看異常
1.簡單的捕獲異常語法
1>如果不確定某些代碼是否能夠正常執行,可以用try來捕獲異常
2>捕獲異常語法格式:

  try:
     嘗試執行的代碼
   except:
     出現錯誤的處理**

先看一個例子:

num = int(input('請輸入一個整數:'))

我輸入了一個a,結果爲:

請輸入一個整數:a
Traceback (most recent call last):
  File "C:/Users/asus/Desktop/Python learning/exception/.idea/exception.py", line 2, in <module>
    num = int(input('請輸入一個整數:'))
ValueError: invalid literal for int() with base 10: 'a'

報錯了!

現在根據語法來捕獲異常:

try:
    num = int(input('請輸入一個整數:'))   #不確定能否被正確執行的代碼
except:
    print('請輸入正確的整數')     #錯誤的後處理代碼

print('這句話用來看看出現錯誤以及不出現錯誤,這句話能不能被打印出來')

我先輸入了一個正確的輸入1,結果爲:

請輸入一個整數:1
這句話用來看看出現錯誤以及不出現錯誤,這句話能不能被打印出來

再輸入了一個錯誤的輸入a,結果爲:

請輸入一個整數:a
請輸入正確的整數
這句話用來看看出現錯誤以及不出現錯誤,這句話能不能被打印出來

可以看到,當輸入錯誤時,except部分的語句會被執行,而下面的語句不管是否錯誤都會被執行!

2.錯誤類型的捕獲
1>代碼在執行時,可能會遇到不同類型的異常,並作出不同的響應,這個時候,我們就需要捕獲錯誤類型了
2>語法

 try:
   嘗試執行的代碼
except 錯誤類型1 :
   針對錯誤類型1,對應的代碼處理
except 錯誤類型2 :
   針對錯誤類型2,對應的代碼處理
......
except Exception as result :
   print(‘未知錯誤 %s’  %result)

先看一個例子:

#提示用戶輸入一個整數
num = int(input('請輸入一個整數:'))
#使用10除以用戶輸入的整數並且輸出
result = 10 / num
print(result)

我首先輸入了一個0,得到結果爲:

Traceback (most recent call last):
  File "C:/Users/asus/Desktop/Python learning/exception/.idea/exception.py", line 13, in <module>
    result = 10 / num
ZeroDivisionError: division by zero

所以錯誤類型爲:ZeroDivisionError 意思爲0不能做除數!

再輸入一個a,得到結果爲:

Traceback (most recent call last):
  File "C:/Users/asus/Desktop/Python learning/exception/.idea/exception.py", line 11, in <module>
    num = int(input('請輸入一個整數:'))
ValueError: invalid literal for int() with base 10: 'a'

所以錯誤類型爲:ValueError

我們再來捕獲錯誤類型:

try:
    #提示用戶輸入一個整數
    num = int(input('請輸入一個整數:'))
    #使用10除以用戶輸入的整數並且輸出
    result = 10 / num
    print(result)
except ZeroDivisionError :
    print('除0錯誤')
except ValueError :
    print('請輸入正確的整數')
    

這次再次輸入一個0,得到結果爲:

除0錯誤

輸入一個a,得到結果爲:

請輸入正確的整數

3.捕獲未知錯誤
在開發時,要預判到所有可能出現的錯誤是有一定難度的,如果希望程序無論出現任何錯誤,都不會因爲python解釋器拋出異常而被終止,可以再增加一個except
語法如下:

except Exception as result :
   print(‘未知錯誤 %s’  %result)

直接上代碼:

try:
    #提示用戶輸入一個整數
    num = int(input('請輸入一個整數:'))
    #使用10除以用戶輸入的整數並且輸出
    result = 10 / num
    print(result)
except ZeroDivisionError :
    print('除0錯誤')
`except Exception as result` :
    print('未知錯誤: %s' %result)
    

當我輸入一個a時,結果爲:

未知錯誤: invalid literal for int() with base 10: 'a'

所以當我們把能預料到的錯誤都寫上之後,最好再加一個except Exception as result來預防出現未知錯誤!

4.異常捕獲的完整語法

try:
   嘗試執行的代碼
except 錯誤類型1 :
   針對錯誤類型1,對應的代碼處理
.......
except 錯誤類型N :
   針對錯誤類型N,對應的代碼處理
except Exception as result :
   #打印錯誤信息
   print(result)
else :
   沒有異常纔會執行的代碼
finally:
   無論是否有異常,都會執行的代碼

上代碼:

try:
 #提示用戶輸入一個整數
    num = int(input('請輸入一個整數:'))
    #使用10除以用戶輸入的整數並且輸出
    result = 10 / num
    print(result)
except ZeroDivisionError :
    print('除0錯誤')
except Exception as result :
    print('未知錯誤 %s' %result)
else:
    print('當try語句成功時執行else的語句!')
finally:
    print('無論是否出現錯誤都會執行的語句!')

print('該語句用於檢驗以上語句執行完後是否能繼續執行後面的語句')

當輸入1時,出現的結果爲:

10.0
當try語句成功時執行else的語句!
無論是否出現錯誤都會執行的語句!
該語句用於檢驗以上語句執行完後是否能繼續執行後面的語句

當輸入0時,出現的結果爲:

請輸入一個整數:0
除0錯誤
無論是否出現錯誤都會執行的語句!
該語句用於檢驗以上語句執行完後是否能繼續執行後面的語句

當輸入a時,出現的結果爲:

未知錯誤: invalid literal for int() with base 10: 'a'
無論是否出現錯誤都會執行的語句!
該語句用於檢驗以上語句執行完後是否能繼續執行後面的語句

5.拋出raise異常
在這裏插入圖片描述拋出異常:在Python中提供了一個Exception的異常類,在開發中,如果爲了滿足業務異常,希望拋出異常,可以:
1.創建一個Exception的對象
2.使用raise關鍵字拋出異常對象

例子:
在這裏插入圖片描述
上代碼:

def input_password():
    # 1. 提示用戶輸入密碼
    password = input('請輸入密碼:')
    # 2. 判斷密碼長度 >=8, 返回輸入的密碼
    if len(password) >= 8 :
        return  password
    # 3. 如果 < 8 主動拋出異常
    print('主動拋出異常')
    # 1> 創建異常對象 - 可以使用錯誤信息字符串作爲參數
    exception = Exception('密碼長度不夠')
    # 2> 主動拋出異常
    raise exception
#既然拋出了異常,我們就可以捕獲異常
try:
   print(input_password())
except Exception as result :
    print(result)

輸入了a,得到的結果是:

主動拋出異常
密碼長度不夠

輸入了12345678,得到的結果是:

12345678

好了,Python的異常就說到這裏!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章