Python學習筆記(十)——異常及異常的處理

本節包括異常的定義,異常的捕獲,異常的傳遞及拋出異常。

1. 異常

異常:程序在運行時,如果Python解釋器遇到一個錯誤,會停止程序的執行,並且會提示一些錯誤的信息。
程序停止執行並且提示錯誤信息這個動作就是拋出異常
所以:
通過異常捕獲可以針對突發事件做集中的處理,從而保證程序的穩定性和健壯性。

2. 捕獲異常

如果對某些代碼的執行不能確定是否正確,可以使用**try:**來捕獲異常
語法:

try:
	嘗試執行的代碼
except:
	出現錯誤的處理
	
描述:當try中的代碼出現錯誤,則執行except中的代碼

代碼演示:

try:
    num = int(input("請輸入一個整數"))
except:
	# 錯誤的處理代碼
    print("請輸入正確的整數")

結果:
請輸入一個整數a
請輸入正確的整數

2.1 針對錯誤類型來捕獲異常

異常有很多類型,需要對不同類型的異常,做出不同的響應。

語法:

try:
	#嘗試執行的代碼
	pass
except 錯誤類型1:
	#對應的代碼處理
except 錯誤類型2:
	#對應的代碼處理
except Exception as result:
	print("未知錯誤%s"% result)

捕獲未知錯誤:

語法
except Exception as result:
		print("未知錯誤%s"% result)

當出現異常時,最後一行錯誤信息的第一個單詞,就是錯誤類型。

示例:

try:
    num = int(input("請輸入一個整數"))
    result = 8/num
    print(result)
except ZeroDivisionError:
    print("分母不能爲0")
except ValueError:
    print("請輸入正確的整數")


try:
    num = int(input("請輸入一個整數"))
    result = 8/num
    print(result)
# except ZeroDivisionError:
#     print("分母不能爲0")
except ValueError:
    print("請輸入正確的整數")
except Exception as res:
    print("未知錯誤%s"%res)

請輸入一個整數0
未知錯誤division by zero

2.2 異常捕獲的完整語法:

try:
	#嘗試執行的代碼
	pass
except 錯誤類型1:
	#對應的代碼處理
except 錯誤類型2:
	#對應的代碼處理
except Exception as result:
	print("未知錯誤%s"% result)
else:
	#沒有異常纔會執行的代碼
finally:
	#無論是否有異常,都會執行的代碼

代碼演示:

try:
    num = int(input("請輸入一個整數"))
    result = 8/num
    print(result)
# except ZeroDivisionError:
#     print("分母不能爲0")
except ValueError:
    print("請輸入正確的整數")
except Exception as res:
    print("未知錯誤%s"%res)
else:
    print("程序正常執行")
finally:
    print("無論是否異常,都會執行")

3. 異常的傳遞

當函數/方法執行出現異常,會將異常傳遞給函數/方法的調用一方
如果傳遞到主函數,仍然沒有異常處理,程序纔會被終止。
因此:
可以在主函數中,增加異常捕獲

def demo1():
    return int(input("請輸入一個整數"))
def demo2():
    return demo1()
try:
    print(demo2())
except Exception as result:
    print("未知錯誤%s" %result)

請輸入一個整數d
未知錯誤invalid literal for int() with base 10: 'd'

4. 拋出raise異常

1.創建Exception異常對象
2.使用raise拋出異常

def input_password():
    pw = input("請輸入密碼")
    if len(pw) >= 8:
        return pw
    print("主動拋出異常")
    # 1.創建異常對象-可以使用錯誤信息字符串作爲參數
    ex = Exception("密碼長度不夠")
    #2.主動拋出異常
    raise ex
#3.捕獲異常
try:
    print(input_password())
except Exception as result:
    print(result)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章