python_異常處理

1、異常處理的定義spa

# 什麼是異常處理
    異常就是程序運行中出現的錯誤,若是改錯誤沒有相應的處理機制
    那麼這個錯誤就會拋出來,程序也會隨之中止運行
# 爲何要有異常處理
    加強代碼的健壯性
    try...except...
# 如何使用
# 異常三部分:
"""
1.報錯類型
2.錯誤信息的值
3.錯誤的定位信息
"""
# 異常分類
"""
1.語法上的錯誤
2.邏輯上的錯誤
"""
# 根據不一樣的錯誤類型來獲取
try:
    # d = {'name': 'jason'}
    # d['password']
    a = 1
    x
    l = [1,2,3,4]
    l[123]
except NameError:
    print('變量未定義')
except KeyError:
    print('字典鍵不存在')
except IndexError:
    print('索引超出範圍')

# 執行結果:變量未定義

萬能異常:code

# 萬能異常:都能返回報錯的信息
try:
    d = {'name': 'jason'}
    d['password']
    # a = 1
    # x
    # l = [1,2,3,4]
    # l[123]
except Exception as e:  # 將錯誤信息的值賦值給變量a
    print(e)
"""
x:name 'x' is not defined
l[123]:list index out of range
d['password'] :'password'
"""

# 我的建議異常不要頻繁使用 能儘可能不用就不用 僅僅只加載會出現報錯的幾個行代碼上下,try裏面的代碼越少越好
else 與finaly
try:
    d = {'name': 'jason'}
    d['password']
    # a = 1
    # x
    # l = [1,2,3,4]
    # l[123]
    print('haha')
    pass
except Exception as e:
    print(e)
else:
    print('當try裏面的代碼沒有報錯的狀況下走else')
finally:
    print('不管前面有沒有報錯 我都會執行')

raise:主動拋出異常blog

class User:
    def __init__(self,name):
        self.__name = name
    def set_info(self,val):
        if not isinstance(val,str):
            raise TypeError('name字段必須是str類型')
        self.__name = val
obj = User('simon')
obj.set_info(123) # TypeError: name字段必須是str類型

assert:判定繼承

l = [1,2,3,4]
assert  len(l) < 0  # AssertionError

自定義異常:索引

class MyError(BaseException):
    def __init__(self,msg):
        self.msg = msg

    def __str__(self):
        return '<%s>'%self.msg
raise MyError('我本身定義了一個異常')

總結:it

try:
    可能報錯的代碼塊
except 異常類型 as 異常信息:
    print(異常信息)
else:
    try監測的代碼沒有任何bug的狀況下才會走else內部代碼塊
finally:
    不管是否出bug都會走finally內部的代碼塊

raise 主動拋出異常
    raise TypeError('異常信息')

assert 斷言

自定義異常 繼承BaseException  內部定義__str__來顯示報錯信息
相關文章
相關標籤/搜索