1、異常處理語句
1.1、try…except語句
語法格式:
try:
block1
except [ExceptionName [as alias]]:
block2
參數說明:
block1:表示可能出錯的代碼塊
ExceptionName [as alias]:可選參數,用於指定要捕獲的異常,其中 ExceptionName表示要捕獲的異常名稱,如果在其右側加上 as alias 表示當前的異常指定一個別名。
block2:表示進行異常處理的代碼塊,在這裏可以輸出固定的提示信息,也可以通過別名輸出異常的具體內容
注意:如果except後面不知道異常名稱,則表示捕獲全部異常。使用try…except語句捕獲異常後,程序會繼續執行。
1.2、try …except…else語句
try …except…else語句與try …except語句的不同在於當沒有異常時,使用else子語句。
例子
def division():
''' 實現功能:分蘋果 '''
print("\n-----------------分蘋果了-----------------\n")
apple = int(input("請輸入蘋果個數:"))
children = int(input("請輸出一共有幾個小朋友:"))
result = apple // children # 計算每個小朋友分幾個蘋果,輸出整數
remain = apple - result * children # 計算剩下的蘋果
if remain > 0:
print(apple, "個蘋果,平均分給", children, "個小朋友,每人分", result,"個,剩下", remain, "個。")
else:
print(apple, "個蘋果,平均分給", children, "個小朋友,每人分", result, "個。")
if __name__ == '__main__':
try: # 捕獲異常
division()
except ZeroDivisionError: # 處理zero異常
print("\n出錯了,不能把蘋果分給0個小朋友。")
except ValueError as e: # 處理value異常
print("輸入錯誤:", e)
else: # 沒有拋出異常時執行
print("蘋果成功分給小朋友。")
1.3、try …except …finally語句
不管是否有異常產生,都會執行finally裏的語句
語法格式:
try:
block1
except [ExceptionName [as alias]]:
block2
finally:
block3
例子
def division():
''' 實現功能:分蘋果 '''
print("\n-----------------分蘋果了-----------------\n")
apple = int(input("請輸入蘋果個數:"))
children = int(input("請輸出一共有幾個小朋友:"))
result = apple // children # 計算每個小朋友分幾個蘋果,輸出整數
remain = apple - result * children # 計算剩下的蘋果
if remain > 0:
print(apple, "個蘋果,平均分給", children, "個小朋友,每人分", result,"個,剩下", remain, "個。")
else:
print(apple, "個蘋果,平均分給", children, "個小朋友,每人分", result, "個。")
if __name__ == '__main__':
try: # 捕獲異常
division()
except ZeroDivisionError: # 處理zero異常
print("\n出錯了,不能把蘋果分給0個小朋友。")
except ValueError as e: # 處理value異常
print("輸入錯誤:", e)
else: # 沒有拋出異常時執行
print("蘋果成功分給小朋友。")
finally:
print("進行了一次分蘋果操作")
輸出:
-----------------分蘋果了-----------------
請輸入蘋果個數:8
請輸出一共有幾個小朋友:0
出錯了,不能把蘋果分給0個小朋友。
進行了一次分蘋果操作
1.4、使用raise語句拋出異常
如果函數或方法中有異常,卻不想在當前函數或方法中處理異常,可以使用raise處理異常。
語法格式:
raise [ExceptionName [(raise)]]
2、使用assert語句調試程序
語法格式:
assert expression [,reason]
說明:
expression: 條件表達式,如果該表達式爲真什麼,都不用做,如果爲假拋出AssertionError異常。
reason:可選參數,用於對判斷條件進行描述,爲了以後更好的知道哪裏出了問題
例子
def division():
''' 實現功能:分蘋果 '''
print("\n-----------------分蘋果了-----------------\n")
apple = int(input("請輸入蘋果個數:"))
children = int(input("請輸出一共有幾個小朋友:"))
assert apple > children, "蘋果不夠分"
result = apple // children # 計算每個小朋友分幾個蘋果,輸出整數
remain = apple - result * children # 計算剩下的蘋果
if remain > 0:
print(apple, "個蘋果,平均分給", children, "個小朋友,每人分", result,"個,剩下", remain, "個。")
else:
print(apple, "個蘋果,平均分給", children, "個小朋友,每人分", result, "個。")
if __name__ == '__main__':
division()
輸出:
請輸入蘋果個數:5
請輸出一共有幾個小朋友:8
Traceback (most recent call last):
File "D:/Python/web/test.py", line 14, in <module>
division()
File "D:/Python/web/test.py", line 6, in division
assert apple > children, "蘋果不夠分"
AssertionError: 蘋果不夠分
通常情況下,assert語句可以和異常處理語句結合使用,把上面的代碼的最後一行語句改爲
try:
division()
except AssertionError as e:
print("\n輸出有誤:", e)
輸出
-----------------分蘋果了-----------------
請輸入蘋果個數:5
請輸出一共有幾個小朋友:8
輸出有誤: 蘋果不夠分
注意:assert語句只在調試階段有效。我們可以通過在執行python命令時加入-O(大寫)參數來關閉asset語句。
如在命令行窗口下可以使用以下命令
python -O 調試文件.py