一.捕獲異常try...except...
try:
11/0
except?? ZeroDivisionError:
print('代碼錯(cuò)誤')
捕獲多個(gè)錯(cuò)誤要加():
try:
open('123.txt','r')#如果123.txt文件不存在切威,那么會(huì)產(chǎn)生IOError異常
print(num)#如果num變量沒有定義蛤肌,那么會(huì)產(chǎn)生NameError異常
except(IOError,NameError):
print(errorMsg)
二.獲取異常的信息描述
三.else
try:
print(num)
except?NameError?as?errorMsg:
print('產(chǎn)生錯(cuò)誤了:%s'%errorMsg)
else:
print('沒有捕獲到異常)
四.try...finally...
在程序中盯串,如果一個(gè)段代碼必須要執(zhí)行,即無論異常是否產(chǎn)生都要執(zhí)行冤寿,那么此時(shí)就需要使用finally。 比如文件關(guān)閉,釋放鎖须妻,把數(shù)據(jù)庫(kù)連接返還給連接池等
importtime
try:
f?=?open('test.txt')
try:
whileTrue:
content?=?f.readline()
iflen(content)?==0:
break
time.sleep(2)
print(content)
except:
#如果在讀取文件的過程中,產(chǎn)生了異常泛领,那么就會(huì)捕獲到
#比如?按下了ctrl+c
pass
finally:
f.close()
print('關(guān)閉文件')
except:
print("沒有這個(gè)文件")
注意:不管有沒有捕捉到錯(cuò)誤荒吏,finally都會(huì)執(zhí)行
五.異常的傳遞
deftest1():
print("----test1-1----")
print(num)
print("----test1-2----")
deftest2():
print("----test2-1----")
test1()
print("----test2-2----")
deftest3():
try:
print("----test3-1----")
test1()
print("----test3-2----")
exceptExceptionasresult:
print("捕獲到了異常,信息是:%s"%result)
print("----test3-2----")
test3()
print("------華麗的分割線-----")
test2()
六.異自定義異常
'''
自定義異常類:
因?yàn)橄到y(tǒng)提供的異常類渊鞋,無法描述我的異常绰更。
我需要自定義一些異常類,來描述我所出現(xiàn)的異常锡宋。
'''
class NameShortException(Exception):
def __init__(self,msg,num):
self.msg = msg
self.num = num
def f():
'''這是輸入姓名并判斷儡湾,如果姓名的長(zhǎng)度小于3,拋出NameShortException異常'''
name = input('請(qǐng)輸入姓名:')
if len(name.strip())<3:
#手動(dòng)拋出一個(gè)異常對(duì)象,以后的代碼不再運(yùn)行
raise NameShortException('名字的長(zhǎng)度至少是3',len(name.strip()))
print('f......')
def main():
try:
f()
except Exception as ex:
print('錯(cuò)誤信息是:%s,輸入的字符串長(zhǎng)度是:%s'%(ex.msg,ex.num))
print('其它代碼执俩。徐钠。。奠滑。丹皱。妒穴。。')
main()