Python 3 學習筆記:異常代碼調試

什麼是異常

程序運行過程中,產生的錯誤統稱為異常(bug)。這些異常有的可能是語法錯誤,如關鍵字輸入錯誤、調用錯誤等,這一類的異常都是顯式的,很好發現;還有一種就是隱式的錯誤,只用在使用時才會被發現,和使用者的操作有關。

下面介紹一下 Python 常見的異常提示:

Python 3 學習筆記:異常代碼調試


異常處理語句

  1. 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


  1. 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("蘋果分配成功。。。")


  1. 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("分配了一次蘋果。")


  1. 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入門”,一個字不能多一個字不能少,即可快速領取!


分享到:


相關文章: