2016-10-13 27 views
0

我想要一些清理活動發生在我的程序崩潰的情況下。我知道有些情況是無法處理的(例如SIGKILL),但我想盡可能多地介紹。如何在碰撞時清理?

atexit模塊是一個很好的候選人,但該文檔明確地指出,當 程序是由不Python處理的信號,當一個Python 殺死

通過該模塊註冊的函數不叫檢測到致命的內部錯誤,或者調用os._exit()時。

是否有函數或Python功能允許處理sys.exit()和未處理的異常程序終止? (這些是我所關心的主要問題)

+0

正如ForceBru所述,最簡單的清理方法是檢查程序啓動時是否需要清理。這樣做的最簡單方法是在成功終止程序時刪除磁盤上的文件。如果啓動時存在文件,則需要清理。 –

回答

0

SIGKILLcannot be handled,無論如何,你的程序只是終止(猛烈地殺死),你無能爲力。

您可以對SIGKILL做的唯一一件事是在您的程序下次啓動期間查找需要清理的數據

對於其他情況,使用atexit來處理Python的解釋器正常終止。如果你有一些未處理的異常,看到在那裏他們可以try/except塊發生和包裝這些代碼片斷:

try: 
    pass 
except ValueError as e: 
    pass 
except: 
    # catch other exceptions 
    pass 

爲了應對sys.exit電話,您可以在try/except包裹整個節目的出發點阻止和捕獲SystemExit的例外:

try: 
    # your program goes here 
    # you're calling your functions from here, etc 
except SystemExit: 
    # do cleanup 
    raise 
+1

這也是我的理解 - 這就是爲什麼我說*我明白某些情況下無法處理*,給出'SIGKILL'的例子。我正試圖涵蓋問題中提到的其他案件。 – WoJ