pyqt5 捕获异常确保程序不退出_Python异常处理详解(基础篇十一)
生活随笔
收集整理的這篇文章主要介紹了
pyqt5 捕获异常确保程序不退出_Python异常处理详解(基础篇十一)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一 異常
1 什么是異常?
示例:
說明:
打開一個不存在的文件123.txt,當(dāng)找不到123.txt 文件時,就會拋出給我們一個IOError類型的錯誤,No such file or directory:123.txt (沒有123.txt這樣的文件或目錄)異常:
當(dāng)Python檢測到一個錯誤時,解釋器就無法繼續(xù)執(zhí)行了,反而出現(xiàn)了一些錯誤的提示,這就是所謂的"異常"2 捕獲異常
<1> 捕獲異常 try...except...
示例:
說明:
- 此程序看不到任何錯誤,因?yàn)橛胑xcept 捕獲到了IOError異常,并添加了處理的方法
- pass 表示實(shí)現(xiàn)了相應(yīng)的實(shí)現(xiàn),但什么也不做;如果把pass改為print語句,那么就會輸出其他信息
總結(jié):
- 把可能出現(xiàn)問題的代碼,放在try中
- 把處理異常的代碼,放在except中
<2> except捕獲多個異常
示例:
想一想:
上例程序,已經(jīng)使用except來捕獲異常了,為什么還會看到錯誤的信息提示?答:
except捕獲的錯誤類型是IOError,而此時程序產(chǎn)生的異常為 NameError ,所以except沒有生效修改后:
實(shí)際開發(fā)中,捕獲多個異常的方式,如下:
小總結(jié):
- 當(dāng)捕獲多個異常時,可以把要捕獲的異常的名字,放到except 后,并使用元組的方式僅進(jìn)行存儲
<3> 獲取異常的信息描述
<4> 捕獲所有異常
<5> else
在if中,它的作用是當(dāng)條件不滿足時執(zhí)行的實(shí)行;同樣在try...except...中也是如此,即如果沒有捕獲到異常,那么就執(zhí)行else中的事情
<6> try...finally...
try...finally...語句用來表達(dá)這樣的情況:
在程序中,如果一個段代碼必須要執(zhí)行,即無論異常是否產(chǎn)生都要執(zhí)行,那么此時就需要使用finally。 比如文件關(guān)閉,釋放鎖,把數(shù)據(jù)庫連接返還給連接池等說明:
test.txt文件中每一行數(shù)據(jù)打印,但是我有意在每打印一行之前用time.sleep方法暫停2秒鐘。這樣做的原因是讓程序運(yùn)行得慢一些。在程序運(yùn)行的時候,按Ctrl+c中斷(取消)程序。我們可以觀察到KeyboardInterrupt異常被觸發(fā),程序退出。但是在程序退出之前,finally從句仍然被執(zhí)行,把文件關(guān)閉。
3 異常的傳遞
<1> try嵌套中
總結(jié):
- 如果try嵌套,那么如果里面的try沒有捕獲到這個異常,那么外面的try會接收到這個異常,然后進(jìn)行處理,如果外邊的try依然沒有捕獲到,那么再進(jìn)行傳遞。
<2> 函數(shù)嵌套調(diào)用中
總結(jié):
- 如果一個異常是在一個函數(shù)中產(chǎn)生的,例如函數(shù)A---->函數(shù)B---->函數(shù)C,而異常是在函數(shù)C中產(chǎn)生的,那么如果函數(shù)C中沒有對這個異常進(jìn)行處理,那么這個異常會傳遞到函數(shù)B中,如果函數(shù)B有異常處理那么就會按照函數(shù)B的處理方式進(jìn)行執(zhí)行;如果函數(shù)B也沒有異常處理,那么這個異常會繼續(xù)傳遞,以此類推。。。如果所有的函數(shù)都沒有處理,那么此時就會進(jìn)行異常的默認(rèn)處理,即通常見到的那樣
- 注意觀察上圖中,當(dāng)調(diào)用test3函數(shù)時,在test1函數(shù)內(nèi)部產(chǎn)生了異常,此異常被傳遞到test3函數(shù)中完成了異常處理,而當(dāng)異常處理完后,并沒有返回到函數(shù)test1中進(jìn)行執(zhí)行,而是在函數(shù)test3中繼續(xù)執(zhí)行
4 自定義異常
你可以用raise語句來引發(fā)一個異常。異常/錯誤對象必須有一個名字,且它們應(yīng)是Error或Exception類的子類
下面是一個引發(fā)異常的例子:
注意點(diǎn):
以上程序中,關(guān)于代碼#super().__init__()的說明
這一行代碼,可以調(diào)用也可以不調(diào)用,建議調(diào)用,因?yàn)開_init__方法往往是用來對創(chuàng)建完的對象進(jìn)行初始化工作,如果在子類中重寫了父類的__init__方法,即意味著父類中的很多初始化工作沒有做,這樣就不保證程序的穩(wěn)定了,所以在以后的開發(fā)中,如果重寫了父類的__init__方法,最好是先調(diào)用父類的這個方法,然后再添加自己的功能5 拋出異常
可以用raise語句來引發(fā)一個異常
總結(jié)
以上是生活随笔為你收集整理的pyqt5 捕获异常确保程序不退出_Python异常处理详解(基础篇十一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java实现相同分数排名_java做成绩
- 下一篇: 锦标赛排序