经常看到有些模块,任何异常都不会崩溃,然后还是继续运行代码,自己试过在程序最外面加上try ----catch----但是好像并不能把所有错误信息都吞了,好像只对块内代码起作用,要是跳到另外的方法仍然会抛出异常,那种吞异常的是怎么写的呀?我现在有个需求要求代码一直跑。即使有异常也不能退出。。。请教各位大神指点
ringa_lee
這需要封裝一個框架,然而你所描述的任何錯誤都繼續運作。這種要求是你假設即使有錯誤也不影響程式的運行結果,那麼這就意味著你自己能夠控制錯誤的範圍,如果這種錯誤發生的機率很大並且並不是致命的,你希望透過在主線程捕獲,任何異常最終通過程式入口拋出。所以你應該是在程式運行啟動塊進行捕獲。
try: main() except: pass
這種方式當出現異常是也會退出,如果希望再繼續嘗試。可以加上一個循環
while time_out < max_time_out: try: main() except: pass timeout+=100
但這種方式必須你自己非常清楚程式在若干次嘗試後能夠正常,否則還是會退出。 最後我想說的是,程式因為異常掛掉是提醒你真的應該去修復而不是忽略。如果忽略可以繼續運行但是帶來了錯誤的結果,你將後悔不已~
應該是
try....except
另外你在最外層加try..except,當程式出錯後,只會在最外層捕捉到錯誤,然後就退出了,我有一個辦法,不過出錯後只能重頭開始(最好找到出錯的地方)
import sys def main(): print(1) int('s') def main1(): print(2) while True: try: main() except KeyboardInterrupt: sys.exit() except Exception: pass if __name__ == '__main__': main1()
這需要封裝一個框架,然而你所描述的任何錯誤都繼續運作。這種要求是你假設即使有錯誤也不影響程式的運行結果,那麼這就意味著你自己能夠控制錯誤的範圍,如果這種錯誤發生的機率很大並且並不是致命的,你希望透過在主線程捕獲,任何異常最終通過程式入口拋出。所以你應該是在程式運行啟動塊進行捕獲。
這種方式當出現異常是也會退出,如果希望再繼續嘗試。可以加上一個循環
但這種方式必須你自己非常清楚程式在若干次嘗試後能夠正常,否則還是會退出。
最後我想說的是,程式因為異常掛掉是提醒你真的應該去修復而不是忽略。如果忽略可以繼續運行但是帶來了錯誤的結果,你將後悔不已~
應該是
另外你在最外層加try..except,當程式出錯後,只會在最外層捕捉到錯誤,然後就退出了,我有一個辦法,不過出錯後只能重頭開始(最好找到出錯的地方)