python如何吞任何形式的異常?
問(wèn)題描述
經(jīng)常看到有些模塊,任何異常都不會(huì)崩潰,然后還是繼續(xù)運(yùn)行代碼,自己試過(guò)在程序最外面加上try ----catch----但是好像并不能把所有錯(cuò)誤信息都吞了,好像只對(duì)塊內(nèi)代碼起作用,要是跳到另外的方法仍然會(huì)拋出異常,那種吞異常的是怎么寫(xiě)的呀?我現(xiàn)在有個(gè)需求要求代碼一直跑。即使有異常也不能退出。。。請(qǐng)教各位大神指點(diǎn)
問(wèn)題解答
回答1:這需要封裝一個(gè)框架,然而你所描述的任何錯(cuò)誤都繼續(xù)運(yùn)行。這種要求是你假設(shè)即使有錯(cuò)誤也不影響程序的運(yùn)行結(jié)果,那么這就意味著你自己能夠控制錯(cuò)誤的范圍,如果這種錯(cuò)誤發(fā)生的概率很大并且并不是致命的,你希望通過(guò)在主線程捕獲,任何異常最終通過(guò)程序入口拋出。所以你應(yīng)該是在程序運(yùn)行啟動(dòng)塊進(jìn)行捕獲。
try: main()except: pass
這種方式當(dāng)出現(xiàn)異常是也會(huì)退出,如果希望再繼續(xù)嘗試。可以加一個(gè)循環(huán)
while time_out < max_time_out: try:main() except:passtimeout+=100
但這種方式必須你自己非常清楚程序在若干次嘗試后能夠正常,否則還是會(huì)退出。最后我想說(shuō)的是,程序因?yàn)楫惓斓羰翘嵝涯阏娴膽?yīng)該去修復(fù)而不是忽略。如果忽略可以繼續(xù)運(yùn)行但是帶來(lái)了錯(cuò)誤的結(jié)果,你將后悔不已~
回答2:應(yīng)該是
try....except
另外你在最外層加try..except,當(dāng)程序出錯(cuò)后,只會(huì)在最外層捕捉到錯(cuò)誤,然后就退出了,我有一個(gè)辦法,不過(guò)出錯(cuò)后只能重頭開(kāi)始(最好找到出錯(cuò)的地方)
import sysdef main(): print(1) int(’s’)def main1(): print(2) while True:try: main()except KeyboardInterrupt: sys.exit()except Exception: passif __name__ == ’__main__’: main1()
相關(guān)文章:
1. 在應(yīng)用配置文件 app.php 中找不到’route_check_cache’配置項(xiàng)2. html按鍵開(kāi)關(guān)如何提交我想需要的值到數(shù)據(jù)庫(kù)3. HTML 5輸入框只能輸入漢字、字母、數(shù)字、標(biāo)點(diǎn)符號(hào)?正則如何寫(xiě)?4. javascript - 請(qǐng)教如何獲取百度貼吧新增的兩個(gè)加密參數(shù)5. Android中能不能判斷一個(gè)數(shù)據(jù)庫(kù)是create來(lái)的,還是open來(lái)的?6. gvim - 誰(shuí)有vim里CSS的Indent文件, 能縮進(jìn)@media里面的7. 跟著課件一模一樣的操作使用tp6,出現(xiàn)了錯(cuò)誤8. PHP類(lèi)屬性聲明?9. javascript - 求助canvas繪制馬賽克的問(wèn)題,老是取色不準(zhǔn)10. java - 安卓接入微信登錄,onCreate不會(huì)執(zhí)行
