當出現異常時, Python 就會建立一個異常物件 。 如果我們編碼處理了該異常, 那麼程式將繼 續執行; 否則程式將停止, 並列印一個 traceback , 內部包含具體異常報告。
可以使用 try-except 程式碼塊來處理異常。編碼處理異常,並編寫友好的錯誤訊息,這要好於有時令人迷惑的 traceback。
1 try-except 程式碼塊
比如經典的除 0 操作,如果直接執行,就會出現 Traceback:
print(3 / 0)
複製程式碼
執行結果:
Traceback 中的 ZeroDivisionError,就是生成的異常物件。
我們利用 try-except 程式碼塊,改寫上述示例:
try:
print(5 / 0)
except ZeroDivisionError:
print('除數不能是零哦')
複製程式碼
執行結果:
除數不能是零哦
再次出現 ZeroDivisionError 異常時,就會列印出友好提示啦O(∩_∩)O~
處理異常物件,還有一個好處:就是安全。如果某些人懷有惡意, 他會通過 traceback 獲知我們不希望他知道的資訊 。比如, 執行程式的檔名稱, 以及部分程式碼 。 專業的黑客可以利用這些資訊,對程式發起攻擊 。
把可能丟擲錯誤的程式碼,放在 try-except 程式碼塊中, 還可以提高程式的健壯性。
2 else 程式碼塊
try 程式碼塊執行成功後,會執行 else 程式碼塊中的內容。
print('請輸入兩個數,小迪同學將做除法操作。')
print('輸入 q,則退出。')
while True:
dividend = input('被除數:')
if (dividend == 'q'):
break
divisor = input('除數:')
try:
result = float(dividend) / float(divisor)
except ZeroDivisionError:
print('除數不能是零哦')
else:
print(result)
複製程式碼
執行結果:
只要程式依賴於外部元素, 比如使用者輸入、 開啟檔案或網路連結, 就有可能出現異常。 所以,綜合使用 try-except-else 程式碼塊,即可以避免使用者無意間造成錯誤,還可以抵禦惡意攻擊,可謂是一舉兩得哦O(∩_∩)O~