使用python自帶的一個atexit模塊
測試代碼:
import atexit @atexit.register def clean(): print("程序推出時會執行的代碼已經被執行!") def test(): example = {'a': 1, 'b': 2} print(example['c']) # 此錯出錯 test()
輸出的結果是這樣的:
Traceback (most recent call last): File "e:\File\OtherText\script練習\讓程序在退出的時候執行一段代碼.py", line 14, in <module> test() File "e:\File\OtherText\script練習\讓程序在退出的時候執行一段代碼.py", line 11, in test print(example["c"]) # 此錯出錯 KeyError: 'c' 程序推出時會執行的代碼已經被執行!
很明顯能看出由於報錯,程序意外終止,但是clean()函數依舊被執行了,程序即使不報錯clean()的內容依舊會被執行,這裡就不再演示,不信的話可以自己嘗試一下,
注意事項:
• 如果clean()函数有参数,那么你可以不用装饰器,而是直接调用atexit.register(clean_1, 参数1, 参数2, 参数3='xxx')。
• 如果程序是被你没有处理过的系统信号杀死的,那么注册的函数无法正常执行。
• 如果发生了严重的Python内部错误,你注册的函数无法正常执行。
• 如果你手动调用了os._exit(),你注册的函数无法正常执行。