當出現異常時, Python 就會建立一個異常對象 。 若是咱們編碼處理了該異常, 那麼程序將繼 續運行; 不然程序將中止, 並打印一個 traceback , 內部包含具體異常報告。安全
可使用 try-except 代碼塊來處理異常。編碼處理異常,並編寫友好的錯誤消息,這要好於有時使人迷惑的 traceback。bash
好比經典的除 0 操做,若是直接運行,就會出現 Traceback:網絡
print(3 / 0)
複製代碼
運行結果:ide
Traceback 中的 ZeroDivisionError,就是生成的異常對象。ui
咱們利用 try-except 代碼塊,改寫上述示例:編碼
try:
print(5 / 0)
except ZeroDivisionError:
print('除數不能是零哦')
複製代碼
運行結果:spa
除數不能是零哦code
再次出現 ZeroDivisionError 異常時,就會打印出友好提示啦O(∩_∩)O~cdn
處理異常對象,還有一個好處:就是安全。若是某些人懷有惡意, 他會經過 traceback 獲知咱們不但願他知道的信息 。好比, 運行程序的文件名稱, 以及部分代碼 。 專業的黑客能夠利用這些信息,對程序發起攻擊 。對象
把可能拋出錯誤的代碼,放在 try-except 代碼塊中, 還能夠提升程序的健壯性。
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~