python--在命令行中運行py文件,如有死循環,如何優雅退出,解決方法之一


問題描述:命令行中運行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/)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM