異常處理

#異常處理:是錯誤發生的信號,一旦程序出錯,就會產生一個異常,應用程序未處理該異常,異常便會拋出,程序隨之終止。
#常見異常類型:
#1.語法錯誤
#2.邏輯錯誤 IndexError
#3.不存在的類,報:AttributeError
class foo:
    pass
foo.x

#4.不存在的key,報KeyError
k={'a':1}
k['y']

#5.若是0作除數,報ZeroDivisionError

#6.不可迭代類型,報TypeError
for i in 3:
    pass

#7.不能把字符串轉化數字,報ValueError
age=input('>>:')
age=int(age)  #int轉化爲數字

#處理異常try
#格式
try:       #檢測下面異常
    出錯的代碼
except 異常的類型: #捕捉上面的代碼的異常類型,相同執行pass
  pass

try:
    l=[]
    print(l[1])
    print('11111')
except IndexError:
    pass

#as e 拿到異常的值#異常分三部分,異常的追蹤信息,異常的類,異常的值。
try:
    l=[]
    print(l[1])
    print('11111')
except IndexError as e:
    print('index',e)

#多個except異常捕捉
try:
    l = []
    print(l[1])
    print('11111')
    d={}
    d=['x']
except IndexError as e:
    print('index',e)
except KeyError as e:
    print('key',e)

#Exception匹配全部異常
try:
    l = []
    print(l[1])
    print('11111')
    d={}
    d=['x']
except Exception as e:
    print('excrption',e)

#例:
try:
    l = []
    print(l[1])
    print('11111')
    d={}
    d=['x']
except IndexError as e:
    print('index',e)
except KeyError as e:
    print('key',e)
except Exception as e:
    print('excrption',e)

#except與else 連用,else:沒有異常發生的時候觸發。
try:
    l = []
    print(l[1])
    print('11111')
    d={}
    d=['x']
except IndexError as e:
    print('index',e)
except KeyError as e:
    print('key',e)
except Exception as e:
    print('excrption',e)
else:
    print('沒有異常')

#finally #有沒有異常都觸發,應用場景回收系統資源。
try:
    l = []
    print(l[1])
    print('11111')
    d={}
    d=['x']
except IndexError as e:
    print('index',e)
except KeyError as e:
    print('key',e)
except Exception as e:
    print('excrption',e)
else:
    print('沒有異常')
finally:
    print('有沒有異常都觸發')

#raise #主動拋出異常
stu=['sdf','er']
if len(stu) == 0:
    raise  TypeError
print('raise')

#assert #斷言(同上)
stu=['sdf','er']
assert len(stu) > 0
print('assert')

#自定義異常
class My(BaseException):
    def __init__(self,msg):
        super(My,self).__init__()  #父類重用
        self.msg=msg

    def __str__(self): #內置函數,打印時觸發,默認打印內存地址
        return '<%s> %self.msg'
raise  My('類型錯誤') #異常的值,print(obj)
相關文章
相關標籤/搜索