您好,登錄后才能下訂單哦!
什么是異常
程序運行過程中,產生的錯誤統稱為異常(bug)。這些異常有的可能是語法錯誤,如關鍵字輸入錯誤、調用錯誤等,這一類的異常都是顯式的,很好發現;還有一種就是隱式的錯誤,只用在使用時才會被發現,和使用者的操作有關。
下面介紹一下 Python 常見的異常提示:
異常類型.jpg
異常處理語句
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 語句調試
該語句一般用于對程序在某個時刻必須滿足的條件進行驗證,
1
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("分配了一次蘋果。")
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。