問題描述:命令行中運行py文件,偶然會有死循環應用,特別是在線程應用中,強制退出會拋出KeyboardInterrupt異常后退出,這個影響不大,但是有沒有更優雅一點的退出方式?
問題分析:這是由於程序非正常完成工作后退出,由系統捕捉的鍵盤輸入異常而導致的臨時終止循環后退出應用程序。
解決方案:捕捉此異常,順便進行一些資源清理操作獲取輸出日志,也可以什么都不做,然后退出。
過程記錄:
我們在命令行中運行py文件,偶然會有死循環應用,特別是在線程應用中,如下片段:
1 #name: loop test 2 #author: kakasi 3 #date: 20220303 4 5 while True: 6 #some code, do something 7 #...... 8 9 pass
命令行運行:
windown系統上,按CTR+C,強制退出命令行窗口
會出現一個異常,然后退出。
知道異常名稱了,就可以修改代碼了,兩種方案,一種是加在while內部,內部捕捉;一種是加在循環外部,全局捕捉。
先看第一種:
1 #name: loop test 2 #author: kakasi 3 #date: 20220303 4 5 while True: 6 try: 7 #some code, do something 8 #...... 9 10 pass 11 except KeyboardInterrupt: 12 #some code, clean up resources 13 #...... 14 15 break 16 pass
運行后按CTR+C強制退出,結果如下:
注: 上述代碼中的pass為占位符,在一個條件后面,至少得有一個語句,沒有會產生IndentationError: expected an indented block錯誤。
比如上述最后一個pass就可以省略,因為while True:后面有try語句塊。try:后面的pass不能省略,除非之間加入了其它語句。
再看第二種,加在外部的
1 #name: loop test 2 #author: kakasi 3 #date: 20220303 4 try: 5 while True: 6 #some code, do something 7 #...... 8 9 pass 10 except KeyboardInterrupt: 11 #some code, clean up resources 12 #...... 13 14 pass
運行后按CTR+C強制退出,結果如下:
綜上所述,問題解決。
轉載請注明出處(https://www.cnblogs.com/spacey/)。