Python退出时强制运行一段代码的实现方法

 更新时间:2020年04月29日 11:31:12   作者:kingname  
这篇文章主要介绍了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栈类实例分析

    Python栈类实例分析

    这篇文章主要介绍了Python栈类,实例分析了Python实现栈的入栈、出栈、移除、判定为空的相关技巧,需要的朋友可以参考下
    2015-06-06
  • Python入门教程(二)Python快速上手

    Python入门教程(二)Python快速上手

    这篇文章主要介绍了Python入门教程(二)Python快速上手,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
    2023-04-04
  • python如何按照自己顺序读出文件名

    python如何按照自己顺序读出文件名

    这篇文章主要介绍了python如何按照自己顺序读出文件名问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python实现打包成库供别的模块调用

    Python实现打包成库供别的模块调用

    这篇文章主要介绍了Python实现打包成库供别的模块调用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Python中集合创建与使用详解

    Python中集合创建与使用详解

    集合是无序的,无序也就没有索引,不能进行索引相关的操作,下面这篇文章主要给大家介绍了关于Python中集合创建与使用,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • python 网页解析器掌握第三方 lxml 扩展库与 xpath 的使用方法

    python 网页解析器掌握第三方 lxml 扩展库与 xpath 的使用方法

    这篇文章主要介绍了python 网页解析器掌握第三方 lxml 扩展库与 xpath 的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Pytorch中的Broadcasting问题

    Pytorch中的Broadcasting问题

    这篇文章主要介绍了Pytorch中的Broadcasting问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • python tkinter之顶层菜单、弹出菜单实例

    python tkinter之顶层菜单、弹出菜单实例

    这篇文章主要介绍了python tkinter之顶层菜单、弹出菜单实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Pytorch的安装过程之pip、conda、Docker容器安装

    Pytorch的安装过程之pip、conda、Docker容器安装

    PyTorch是一个基于Python的开源深度学习框架,可用于训练和预测深度学习模型,PyTorch支持多种安装方法,这篇文章主要介绍了Pytorch的安装----pip、conda、Docker容器,需要的朋友可以参考下
    2023-04-04
  • 对numpy中的transpose和swapaxes函数详解

    对numpy中的transpose和swapaxes函数详解

    今天小编就为大家分享一篇对numpy中的transpose和swapaxes函数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08

最新评论