ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python--在命令行中运行py文件,如有死循环,如何优雅退出,解决方法之一

2022-03-03 11:04:43  阅读:354  来源: 互联网

标签:code python #...... py some -- while pass 退出


问题描述:命令行中运行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/kakasi9527/)。

标签:code,python,#......,py,some,--,while,pass,退出
来源: https://www.cnblogs.com/kakasi9527/p/15958740.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有