異常處理
try嵌套異常:如果內層無法捕獲,將異常拋給外層
函數嵌套異常:如果內層函數無法處理該異常,將會拋給調用它的地方處理
# 美觀 功能強大 易用 穩定, 穩定性對於程序最重要
# 異常處理作用: 網絡/用戶等帶來的一些可預判的錯誤進行提前的保護措施
# 提高程序穩定性
# 獲取錯誤信息,用於分析問題
"""
BaseException是異常類的基類
"""
#
# try: # try後邊except和finally至少要有一個,else可有可無,有else必須要有except
# ...
# except: # 出現異常走except
# ...
# else: # 沒有異常走else
# ...
# finally: # 不論是否出現異常,都會走 finally
# ...
"""
except: 這種格式可捕獲所有錯誤
except 具體的異常類:
except(異常類1,異常類2):
"""
f = None
file_name = input('請輸入文件名:')
try:
f = open(file_name)
content = f.read()
print(content, type(f))
except BaseException as e: # 打印具體的錯誤信息 ★
print('出現錯誤:%s' % e)
finally:
if type(f) == "<class '_io.TextIOWrapper'>":
f.close()
自定義異常
"""
1.繼承BaseException
2.在需要進行處理的位置,主動拋出異常
格式:raise 異常對象
3.在代碼的外側對自定義異常進行捕獲,以便進行統一的異常處理,減少代碼的冗餘
"""
# 封裝異常處理 有利於代碼重構(一改都改,方便修改)
class PhoneNumError(BaseException):
def handle_error(self):
print('顯示彈窗')
print('提示:出現手機號錯誤 %s' % self)
print('關閉彈窗')
try:
phone_num = input('請輸入手機號:')
if len(phone_num) != 11:
raise PhoneNumError('位數錯誤')
elif not phone_num.isdecimal(): # isdecimal() 判斷字符串是否都是數字,是返回True,否返回False
raise PhoneNumError('含有非數字')
except PhoneNumError as e: # e是拋出的異常對象(eg.PhoneNumError('位數錯誤'))
e.handle_error()