#異常處理:是錯誤發生的信號,一旦程序出錯,就會產生一個異常,應用程序未處理該異常,異常便會拋出,程序隨之終止。
#常見異常類型:
#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)
異常處理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.