搜尋

首頁  >  問答  >  主體

python如何吞任何形式的异常?

经常看到有些模块,任何异常都不会崩溃,然后还是继续运行代码,自己试过在程序最外面加上try ----catch----但是好像并不能把所有错误信息都吞了,好像只对块内代码起作用,要是跳到另外的方法仍然会抛出异常,那种吞异常的是怎么写的呀?我现在有个需求要求代码一直跑。即使有异常也不能退出。。。请教各位大神指点

ringa_leeringa_lee2837 天前548

全部回覆(2)我來回復

  • PHP中文网

    PHP中文网2017-04-18 10:35:44

    這需要封裝一個框架,然而你所描述的任何錯誤都繼續運作。這種要求是你假設即使有錯誤也不影響程式的運行結果,那麼這就意味著你自己能夠控制錯誤的範圍,如果這種錯誤發生的機率很大並且並不是致命的,你希望透過在主線程捕獲,任何異常最終通過程式入口拋出。所以你應該是在程式運行啟動塊進行捕獲。

    try:
        main()
    except:
        pass

    這種方式當出現異常是也會退出,如果希望再繼續嘗試。可以加上一個循環

    while time_out < max_time_out:
        try:
            main()
        except:
            pass
            timeout+=100

    但這種方式必須你自己非常清楚程式在若干次嘗試後能夠正常,否則還是會退出。
    最後我想說的是,程式因為異常掛掉是提醒你真的應該去修復而不是忽略。如果忽略可以繼續運行但是帶來了錯誤的結果,你將後悔不已~

    回覆
    0
  • 怪我咯

    怪我咯2017-04-18 10:35:44

    應該是

    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()
    

    回覆
    0
  • 取消回覆