pythonⅤ——異常

異常處理

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()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章