異常:就是錯(cuò)誤
(一)捕獲異常
try:#有與沒(méi)有一樣
可能出錯(cuò)的代碼#如果出錯(cuò),則執(zhí)行except:內(nèi)容,否則不執(zhí)行
except 異常1:
處理方式
except 異常2:
處理方式
...
********************************
(1)#捕獲單個(gè)異常
try:
print(abc)
except NameError:
print("沒(méi)有定義變量")
(2)#捕獲多個(gè)異常
try:
print(abc)
open("abc.txt")
except (FileNotFoundError,NameError):
#多個(gè)異常python3需要用元組方式填寫(xiě)異常名字
#python2與python3有區(qū)別,2不用加()
print("沒(méi)有。。。")
(3)#獲得系統(tǒng)默認(rèn)異常基本信息
try:
print(abc)
except NameError as ffff:#ffff變量相當(dāng)于狗,存儲(chǔ)系統(tǒng)異常默認(rèn)基本信息
print("沒(méi)有。。。")
print(ffff)------>打印系統(tǒng)默認(rèn)異常
************************************
try:
print(abc)
except (NameError,FileNotFoundError) as ffff:
print("沒(méi)有。。。")
print(ffff)------>打印系統(tǒng)默認(rèn)異常
(4)#捕獲所有異常
方式1:獲取所有的異常
try:
print(abc)
except :
print("捕獲到異常")
方式2:獲取所有的異常,并保存系統(tǒng)異常
try:
print(abc)
except Exception as result:#Exception是所有異常類的基類
print(result)
(5)else組合
try:
pass
except Exception as error:#try中有異常,捕獲異常后做這件事
pass
else: #try中沒(méi)有異常再做這件事
pass
(6)try ... finally 組合
try:
pass
except Exception as e:#捕獲異常做這件事
pass
else:#沒(méi)有異常做這件事
pass
finally:#不管啥情況,都執(zhí)行
pass
(二)異常的傳遞
def test1():
print("-------1--1---------")
print(num)
print("-------1--2---------")
def test2():
print("-------2--1---------")
test1()
print("-------2--2---------")
def test3():
try:
print("-------3--1---------")
test2()
print("-------3--2---------")
except Exception as e:
print("捕獲到了異常")
test3()#出現(xiàn)異常,層層傳遞,直到捕獲異常
(三)拋出自定義的異常
class Test(Exception):
def __init__(self,length,atleast)
self.length = length
self.atleast = atleast
try:
raise Test(1,2)#raise + 拋出Exception子類的對(duì)象
except Test as result:#result 相當(dāng)于Test(1,2)對(duì)象
print("---異常---")
print(result.length)----->1
(四)異常處理中拋出異常(思想)
class Test(object):
def __init__(self, switch):
self.switch = switch #開(kāi)關(guān)
def calc(self, a, b):
try:
return a/b
except Exception as result:
if self.switch:
print("捕獲開(kāi)啟,已經(jīng)捕獲到了異常,信息如下:")
print(result)
else:
#重新拋出這個(gè)異常,此時(shí)就不會(huì)被這個(gè)異常處理給捕獲到,從而觸發(fā)默認(rèn)的異常處理
raise#拋出異常
a = Test(True)
a.calc(11,0)
print("---------華麗的分割線----------")
a.switch = False
a.calc(11,0)