本篇文章小编给大家分享一下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(),你注册的函数无法正常执行。

如何运行一段python代码_Python退出时强制运行一段代码如何实现 Python退出时强制运行一段代码实现方法...相关推荐

  1. python多线程抢红包代码_Python有哪些神一般的骚操作? 远远不止抢车票、抢红包《附代码》...

    ​ 有人说,"Python除了不会生孩子,Python从撩妹到装x,无所不能!什么都会!" 下载视频?我用Python: 玩跳一跳?我用Python跳到4999分: 撩妹子?依然用 ...

  2. float函数python作用_python函数每日一讲 - float函数类型转换详解|python教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 函数描述 float([x]) 函数将数字或数字的字符串表示形式转换为与它等效的有符号浮点数..如果参数x ...

  3. 怎么一键执行java程序_如何快速、低成本、低扰动地运行一段Java代码

    JVM是个运行服务端应用的好VM,但如果你只是想频繁地运行一段Java写的脚本,或者在跑一些辅助性的Java程序比如监控,比如日志收集,这时候的诉求就和平日里的应用不一样了: 1.启动快速,动静小. ...

  4. python循环一段代码_Python循环语句代码详解:while、for、break

    导读:循环语句是指重复执行同一段代码块,通常用于遍历集合或者累加计算.Python中的循环语句有while语句.for语句. 01 while循环 循环语句是程序设计中常用的语句之一.任何编程语言都有 ...

  5. python面向对象大段代码_python粗谈面向对象(一)

    面向过程编程vs函数式编程 面向过程编程 以计算对象的元素个数为例. str_1 = 'abcdefg'count=0for i in str_1: #统计字符串元素个数 count += 1list ...

  6. python如何注释一段代码_python如何注释

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我是多行注释1 我是多行注释2 我是多行注释3print(我上面的是多行注释)内 ...

  7. python如何注释一段代码_Python 中如何写注释

    在写 Python 代码的时候,一个很好的编码实践就是使得你的代码简洁,易懂.组织代码,设置变量,以及给函数有意义的名字,都是几个不错的方法. 另外一个提高代码可读性的方式就是使用注释.一个注释就是可 ...

  8. 树莓派退出python的代码_Python实现树莓派WiFi断线自动重连的实例代码

    实现 WiFi 断线自动重连.原理是用 Python 监测网络是否断线,如果断线则重启网络服务. 1.Python 代码 autowifi.py,放在 /home/pi 目录下: #!/usr/bin ...

  9. python常用代码_Python常用算法学习(3)(原理+代码)——最全总结

    1,什么是算法的时间和空间复杂度 算法(Algorithm)是指用来操作数据,解决程序问题的一组方法,对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但是在过程中消耗的资源和时间却会有很大 ...

  10. python打地鼠游戏代码_Python 0基础开发游戏:打地鼠(详细教程)VS code版本

    如果你没有任何编程经验,而且想尝试一下学习编程开发,这个系列教程一定适合你,它将带你学习最基本的Python语法,并让你掌握小游戏的开发技巧.你所需要的,就是付出一些时间和耐心来尝试这些代码和操作.文 ...

最新文章

  1. Task02——零基础入门NLP - 新闻文本分类之数据读取与分析
  2. 字节跳动教育大规模裁员:赔付方式N+2
  3. json字符串拼接 json_encode 数组带有花括号{}和中括号[]
  4. 转义序列Escape Sequences及Linux echo命令多种颜色显示
  5. SQL Server之存储过程基础知识
  6. 神策数据获华农保险2020年“最佳合作机构”荣誉称号
  7. Could not open app - SAP UI5 error message
  8. c#中textbox属性_C#.Net中的TextBox.MaxLength属性与示例
  9. 升级锦囊 | 测试开发核心技术46讲
  10. 洛谷 P1219 八皇后题解
  11. 鸿鹄系统和鸿蒙系统电脑,荣耀智慧屏发布:首发鸿鹄818处理器及鸿蒙系统,定价3799元起...
  12. android pdf417条码,条码控件Dynamsoft Barcode Reader教程:从PDF417驾驶执照中提取数据...
  13. ICH E2B | ICSR 电子传输网关对接解决方案(CDE EDI)
  14. Winform Chart控件常见问题汇总
  15. python手工打码_python云打码
  16. python:cv2.VideoCapture().get()/.set()及cv2.VideoWriter_fourcc()
  17. 维基解密再爆料:CIA 2008年就开始监控iPhone了
  18. H5 css引入方式 内联样式表
  19. java开发:mysql
  20. 网络安全职业_我如何开始网络安全职业

热门文章

  1. 经典SQL语句大全 收藏
  2. redis 安装测试
  3. 80x86描述符总结及解析描述符的小程序
  4. 程序的加载和执行(一)——《x86汇编语言:从实模式到保护模式》读书笔记21
  5. C语言再学习 -- 内存管理
  6. dnf安徒恩服务器不稳定,DNF安图恩掉线怎么办 INS安图恩攻坚战不惧掉线
  7. 在深度神经网络中你有多吸引人?
  8. Android Linux内核编译调试
  9. GDOI2017 旅游记
  10. kettle读取json文件并读取数据_Labview打开Excel文件读取数据