如何在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/69955379/viewspace-2692250/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何在macOS Monterey中強制退出未響應程式?Mac
- **java設定一段程式碼執行超時時間(轉)**Java
- 應用程式無響應?如何在Mac上強制退出應用Mac
- 【轉】C# 中 強制退出WinForm程式C#ORM
- 教你如何強制退出Mac無響應程式Mac
- JavaScript的程式碼執行機制JavaScript
- 多執行緒執行任務時,某個執行緒拋異常,如何讓程式立即退出執行緒
- shell指令碼命令 執行python檔案&python命令列執行python程式碼指令碼Python命令列
- 如何在NotePad++中執行PHP程式碼?PHP
- Python 計算程式執行多久程式碼Python
- win10強制退出鍵是什麼 window10強制退出快捷鍵是哪個Win10
- 如何在互動式環境中執行Python程式Python
- 如何用iPad執行Python程式碼?iPadPython
- 用GPU來執行Python程式碼GPUPython
- python程式計算執行時間差Python
- 如何快速、低成本、低擾動地執行一段Java程式碼Java
- 寫一段java程式來執行linux命令JavaLinux
- 如何在Docker容器啟動時自動執行指令碼Docker指令碼
- python怎麼隱藏一段程式碼Python
- Springboot啟動時執行指定程式碼Spring Boot
- 如何測量程式碼執行時間
- 【譯】使用“強制執行到游標”
- svn 提交程式碼時強制錄入日誌設定
- 京東一面:如何在SpringBoot啟動時執行特定程式碼?有哪些方式?Spring Boot
- Flutter 非同步機制:Future(四)執行功能程式碼Flutter非同步
- Spring Security 強制退出指定使用者Spring
- python怎麼退出程式Python
- Python執行作業系統命令並取得返回值和退出碼,支援有互信的遠端執行Python作業系統
- 監控 Python 記憶體使用情況和程式碼執行時間!Python記憶體
- vim設定一鍵執行python程式碼Python
- python爬蟲之多執行緒、多程式+程式碼示例Python爬蟲執行緒
- Ubuntu伺服器定時執行Python指令碼Ubuntu伺服器Python指令碼
- 程式碼如人
- 程式碼執行
- 執行python指令碼後臺執行Python指令碼
- unity C# 每隔一段時間執行一次UnityC#
- 如何在Spring Boot應用啟動之後立刻執行一段邏輯Spring Boot
- 淺談小程式執行機制