python--在命令行中运行py文件,如有死循环,如何优雅退出,解决方法之一
2022/3/3 12:15:08
本文主要是介绍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/kakasi9527/)。
这篇关于python--在命令行中运行py文件,如有死循环,如何优雅退出,解决方法之一的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03用FastAPI掌握Python异步IO:轻松实现高并发网络请求处理
- 2025-01-02封装学习:Python面向对象编程基础教程
- 2024-12-28Python编程基础教程
- 2024-12-27Python编程入门指南
- 2024-12-27Python编程基础
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型