如何在Python退出時強制執行一段程式碼
設想這樣一個場景,你要給一個專案開發測試程式,程式開始執行的時候,會建立初始環境,測試完成以後,會清理環境。 |
設想這樣一個場景,你要給一個專案開發測試程式,程式開始執行的時候,會建立初始環境,測試完成以後,會清理環境。
這段邏輯本身非常簡單:
setup() test() clean()
但由於測試的程式碼比較複雜,你總是在除錯的時候程式異常,導致每次clean()函式還沒有來得及執行,程式就崩潰了。
你可能想到,如果這樣寫會怎麼樣呢:
setup() try: text() except Exception as e: print('執行異常:', e) clean()
似乎看起來,程式一定會執行到clean()函式,但是,如果你程式碼寫的多,你就應該知道,濫用try...except...會讓你非常痛苦。例如它突然給你列印一個執行異常: 1。你根本不知道是哪裡出了問題,也不知道具體出了什麼問題。為了找到問題,你必須讓程式把錯誤爆出來。但這樣一來,clean()又不能正常執行了。
有什麼辦法,既能讓程式報錯,又能在報錯已經還能執行clean()呢?
這個時候,我們就可以使用Python自帶的atexit這個模組了。它的使用方法非常簡單:
import atexit @atexit.register def clean(): print('清理環境相關的程式碼') setup() test()
這樣一來,我們不需要顯式呼叫clean函式了。無論程式正常結束,還是程式異常報錯,clean函式里面的內容總會執行。
如下圖所示:
atexit使用中有下面幾個注意事項:
你可以註冊多個退出函式,他們會按照註冊時間從晚到早以此執行。例如:
import atexit @atexit.register def clean_1(): ... @atexit.register def clean_2(): ... 會先執行clean_2()後執行clean_1()
如果clean()函式有引數,那麼你可以不用裝飾器,而是直接呼叫atexit.register(clean_1, 引數1, 引數2, 引數3='xxx')。
如果程式是被你沒有處理過的系統訊號殺死的,那麼註冊的函式無法正常執行。
如果發生了嚴重的Python內部錯誤,你註冊的函式無法正常執行。
如果你手動呼叫了os._exit(),你註冊的函式無法正常執行。
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2692242/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 應用程式無響應?如何在Mac上強制退出應用Mac
- **java設定一段程式碼執行超時時間(轉)**Java
- python執行時強制重新整理緩衝區Python
- javascript如何測試一段程式碼的執行時間JavaScript
- js檢測一段程式碼的執行消耗時間JS
- c# 強制退出C#
- 【轉】C# 中 強制退出WinForm程式C#ORM
- 一段測試try...catch執行時間的程式碼
- 如何計算一段js程式碼執行耗費的時間JS
- js如何計算一段程式碼的執行花費時間JS
- 如何在macOS Monterey中強制退出未響應程式?Mac
- 教你如何強制退出Mac無響應程式Mac
- 生成一段可被外部執行的JS程式碼JS
- JavaScript的程式碼執行機制JavaScript
- 實現強制換行的CSS程式碼CSS
- 如何在程式碼中執行apk安裝APK
- win10強制退出鍵是什麼 window10強制退出快捷鍵是哪個Win10
- 強制qq聊天程式碼
- 一段對16進位制字串進行異或的程式碼字串
- 程式執行一段時間當機問題 hibernate3.1
- Job長時間執行不能退出的分析
- 想後臺執行一段程式碼,請教怎麼寫?
- python多執行緒程式設計2—執行緒的建立、啟動、掛起和退出Python執行緒程式設計
- 【譯】使用“強制執行到游標”
- 如何在Docker容器啟動時自動執行指令碼Docker指令碼
- shell指令碼命令 執行python檔案&python命令列執行python程式碼指令碼Python命令列
- quartz不正常執行.執行一段時間後無故停止quartz
- Jboss叢集執行一段時間自己停止。
- svn 提交程式碼時強制錄入日誌設定
- 如何在互動式環境中執行Python程式Python
- Python 計算程式執行多久程式碼Python
- 如何在NotePad++中執行PHP程式碼?PHP
- 如何快速、低成本、低擾動地執行一段Java程式碼Java
- .NET程式碼樹執行時間計時器
- python程式計算執行時間差Python
- javascript程式碼執行機制簡單介紹JavaScript
- 如何測量程式碼執行時間
- JavaScript 檢測程式碼執行時間JavaScript