1 異常簡介
捕獲異常try...except...
例1
try:
print(a)
i = 1/0 # 如果前面出現(xiàn)異常,拋出錯誤,本行沒有執(zhí)行
except (NameError, ZeroDivisionError) as e:#捕獲多個異常
print("出現(xiàn)異常:%s"%e)
輸出:
出現(xiàn)異常:name 'a' is not defined
例2
f=None
try: #從本行開始捕獲異常
f = open("text.txt")
try:
content = f.read()
content.index("hadoop")
except Exception as ex: # 捕獲所有異常
print(ex)
except FileNotFoundError as ex: # 捕獲文件不存在的異常
print(ex)
else:#沒有異常的情況會自動執(zhí)行的代碼
print("沒有異常的情況會自動執(zhí)行的代碼")
finally: # 最終要執(zhí)行的代碼,不管前面是否出現(xiàn) 異常
print("關(guān)閉文件")
if f:
f.close()
例3,異常的傳遞
f=None
try: #從本行開始捕獲異常
f = open("text.txt")
try:
content = f.read()
content.index("hello")
i = 1/0
except ValueError as ex: # 捕獲ValueError異常,未捕獲除0異常,傳遞給外層捕獲
print(ex)
except (FileNotFoundError,ZeroDivisionError) as ex: # 捕獲文件不存在和除0的異常,最外層沒有捕獲,則由python捕獲
print(ex)
else:
print("沒有異常的情況會自動執(zhí)行的代碼")
finally: # 最終要執(zhí)行的代碼,不管前面是否出現(xiàn)異常
print("關(guān)閉文件")
if f:
f.close()
自定義異常
class PassWordException(Exception): # 自定義異常的類
def __init__(self, password, min_length):
self.password = password
self.min_length = min_length
def __str__(self):
return "%s密碼錯誤,密碼最小長度為%s"%(self.password,self.min_length)
def reg(username,password):
if len(password)<6:
raise PassWordException(password,6) # 拋出自定義的異常
else:
print("用戶名:%s,密碼%s"%(username,password))
try:
reg("ZhangSan","123")
except FileNotFoundError as e: # 兩個except會按照順序先執(zhí)行第一個,如果第一個滿足異常類型,不會執(zhí)行后面的except
print("第一個except,FileNotFoundError:%s" % e)
except PassWordException as e:
print("第二個except,PassWordException:%s" % e)
except Exception as e:
print("第三個except,Exception:%s" % e)
掃碼關(guān)注5G通信官方公眾號,免費領(lǐng)取以下5G精品資料
1、回復“YD5GAI”免費領(lǐng)取《中國移動:5G網(wǎng)絡AI應用典型場景技術(shù)解決方案白皮書》
2、回復“5G6G”免費領(lǐng)取《5G_6G毫米波測試技術(shù)白皮書-2022_03-21》
3、回復“YD6G”免費領(lǐng)取《中國移動:6G至簡無線接入網(wǎng)白皮書》
4、回復“LTBPS”免費領(lǐng)取《《中國聯(lián)通5G終端白皮書》》
5、回復“ZGDX”免費領(lǐng)取《中國電信5G NTN技術(shù)白皮書》
6、回復“TXSB”免費領(lǐng)取《通信設(shè)備安裝工程施工工藝圖解》
7、回復“YDSL”免費領(lǐng)取《中國移動算力并網(wǎng)白皮書》
8、回復“5GX3”免費領(lǐng)取《 R16 23501-g60 5G的系統(tǒng)架構(gòu)1》