什麼是異常
程序運行過程中,產生的錯誤統稱為異常(bug)。這些異常有的可能是語法錯誤,如關鍵字輸入錯誤、調用錯誤等,這一類的異常都是顯式的,很好發現;還有一種就是隱式的錯誤,只用在使用時才會被發現,和使用者的操作有關。
下面介紹一下 Python 常見的異常提示:
異常處理語句
- try … except …
在使用時,將可能產生異常的代碼放在 try 語句中,把處理結果放在 except 語句中,這樣,當 try 後面的代碼發生錯誤時就會執行 except 中的代碼。如果 try 後的代碼沒有異常,則不會執行 except 後的代碼。
try: do some things except exceptionName: do some things
exceptionName 用於指定可能出現的異常的名稱。如果不指定異常的名稱,則表示捕獲全部可能發生的異常。
示例代碼:
def division(): print("====== 開始分蘋果 ======") apple = int(input("一共有幾個大蘋果:")) child = int(input("一共有幾個小朋友:")) result = apple // child remain = apple % child if remain > 0: print("一共 {:d} 個大蘋果平均分給 {:d} 個小朋友,每人 {:d} 個,剩餘 {:d} 個。".format(apple, child, result, remain)) else: print("一共 {:d} 個大蘋果平均分給 {:d} 個小朋友,每人 {:d} 個。".format(apple, child, result)) if __name__ == "__main__": try: division() except ZeroDivisionError: print("蘋果不能被 0 個小朋友平分!!!")
在捕獲異常的時候,可以同時捕獲多個異常,如:
try: do some things except(ValueError, ZeroDivisionError) as e: do some things
- try … except … else
該語句在 except 之後加了一個 else 語句,用於指定當 try 語句沒有發現異常時需要執行的代碼,如果 try 語句中發現了異常,則不再執行 else 之後的代碼。
try: do some things except exceptionName: do some things else: do some things
示例代碼:
def division(): print("====== 開始分蘋果 ======") apple = int(input("一共有幾個大蘋果:")) child = int(input("一共有幾個小朋友:")) result = apple // child remain = apple % child if remain > 0: print("一共 {:d} 個大蘋果平均分給 {:d} 個小朋友,每人 {:d} 個,剩餘 {:d} 個。".format(apple, child, result, remain)) else: print("一共 {:d} 個大蘋果平均分給 {:d} 個小朋友,每人 {:d} 個。".format(apple, child, result)) if __name__ == "__main__": try: division() except ZeroDivisionError: print("蘋果不能被 0 個小朋友平分!!!") except ValueError as e: print("輸入錯誤!!!", e) else: print("蘋果分配成功。。。")
- try … except … finally
無論 try 語句中是否發生異常,都會執行 finally 之後的代碼。
try: do some things except exceptionName: do some things finally: do some things
示例代碼:
def division(): print("====== 開始分蘋果 ======") apple = int(input("一共有幾個大蘋果:")) child = int(input("一共有幾個小朋友:")) result = apple // child remain = apple % child if remain > 0: print("一共 {:d} 個大蘋果平均分給 {:d} 個小朋友,每人 {:d} 個,剩餘 {:d} 個。".format(apple, child, result, remain)) else: print("一共 {:d} 個大蘋果平均分給 {:d} 個小朋友,每人 {:d} 個。".format(apple, child, result)) if __name__ == "__main__": try: division() except ZeroDivisionError: print("蘋果不能被 0 個小朋友平分!!!") except ValueError as e: print("輸入錯誤!!!", e) else: print("蘋果分配成功。。。") finally: print("分配了一次蘋果。")
- raise
如果某個函數可能會產生異常,但是不想在當前函數中處理該異常,則可以使用 raise 語句在函數中拋出異常,
raise [exceptionName[(reason)]]
其中,exceptionName[(reason)] 為可選參數,用於指定拋出的異常名稱及異常信息的描述,如果省略則把異常原樣拋出。
示例代碼:
def division(): print("====== 開始分蘋果 ======") apple = int(input("一共有幾個大蘋果:")) child = int(input("一共有幾個小朋友:")) if apple < child: raise ValueError("蘋果太少了不夠分!") result = apple // child remain = apple % child if remain > 0: print("一共 {:d} 個大蘋果平均分給 {:d} 個小朋友,每人 {:d} 個,剩餘 {:d} 個。".format(apple, child, result, remain)) else: print("一共 {:d} 個大蘋果平均分給 {:d} 個小朋友,每人 {:d} 個。".format(apple, child, result)) if __name__ == "__main__": try: division() except ZeroDivisionError: print("蘋果不能被 0 個小朋友平分!!!") except ValueError as e: print("輸入錯誤!!!", e) else: print("蘋果分配成功。。。") finally: print("分配了一次蘋果。")
程序測試
使用 IDE 調試
基本上所有的 IDE 都具有代碼調試功能,如 Python 自帶的 IDLE 和 PyCharm 等等。一般都是在出現異常的地方設置斷點,然後在此處查看數據的值是否正確。具體的內容我也在學習過程中,沒有可以調試的代碼,以後如果有資料了在進行補充。
使用 assert 語句調試
該語句一般用於對程序在某個時刻必須滿足的條件進行驗證,
assert expression [reason]
其中,expression 是一個條件表達式,如果為假則拋出 AssertError 異常,反之則什麼都不做。reason 為可選參數,用於描述前面的 expression 為了更好的知道哪裡出現了錯誤。
示例代碼:
def division(): print("====== 開始分蘋果 ======") apple = int(input("一共有幾個大蘋果:")) child = int(input("一共有幾個小朋友:")) assert apple > child, "蘋果不夠分。" result = apple // child remain = apple % child if remain > 0: print("一共 {:d} 個大蘋果平均分給 {:d} 個小朋友,每人 {:d} 個,剩餘 {:d} 個。".format(apple, child, result, remain)) else: print("一共 {:d} 個大蘋果平均分給 {:d} 個小朋友,每人 {:d} 個。".format(apple, child, result)) if __name__ == "__main__": try: division() except ZeroDivisionError: print("蘋果不能被 0 個小朋友平分!!!") except ValueError as e: print("輸入錯誤!!!", e) else: print("蘋果分配成功。。。") finally: print("分配了一次蘋果。")
◆ ◆ ◆ ◆ ◆◆ ◆ ◆ ◆ ◆◆ ◆ ◆ ◆ ◆◆ ◆ ◆ ◆ ◆◆ ◆ ◆ ◆ ◆◆ ◆ ◆ ◆ ◆◆ ◆ ◆ ◆ ◆◆ ◆ ◆ ◆ ◆◆ ◆ ◆ ◆◆◆◆
為了幫各位觀眾老爺們快速入門python,我在這裡準備了一套“經典入門教程”,這些是入門付費教程哦,現在當做福利免費贈送給各位觀眾老爺們,私信我“python入門”就可以領取!
點擊我的頭像關注我進入主頁,就能看到私信按鈕了。私信我“python入門”,一個字不能多一個字不能少,即可快速領取!