今天來看看異常
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的異常就說到這裏!