Python进阶之atexit模块使用

2023-11-04

 

 

微信搜索“菜鸟童靴”,选择“关注公众号”

我们一起开启Python进阶之旅!

 

如何让Python在退出时强制运行一段代码,说起这个需求,我们就不得不说Python atexit模块了:

退出处理器 atexit 模块定义了清理函数的注册和反注册函数. 被注册的函数会在解释器正常终止时执行. atexit 会按照注册顺序的逆序执行; 如果你注册了 A, BC, 那么在解释器终止时会依序执行 C, B, A.

看完这段介绍,有点类似栈的原理,后进先出

 

1、举个例子说明:

def goodbye(name, adjective):
   print("Goodbye %s, it was %s to meet you."% (name, adjective))

def hello():
   print('hello world!')

def a():
   print('a')

import atexit
atexit.register(goodbye, 'Mr.Yang', 'nice')#3
atexit.register(a)#2
hello()#1正常程序首先被执行

#执行顺序 1 2 3

运行结果

 

 

2、 作为 [decorator]: 使用,使用场景, 但是只适用于没有参数时调用

举例说明,对上述代码稍作修改:

import atexit

def hello():
   print('hello world!')
@atexit.register
def a():
   print('a')

hello()

#运行结果
#hello world!
#a

3、取消注册, 示例如下。

def goodbye(name, adjective):
   print("Goodbye %s, it was %s to meet you."% (name, adjective))

def hello():
   print('hello world!')

def a():
   print('a')

import atexit
atexit.register(goodbye, 'Mr.Yang', 'nice')#3
atexit.register(a)#2
hello()#1正常程序首先被执行
atexit.unregister(a)
#正常执行顺序 1 2 3

#由于设置了取消注册atexit.unregister(a),

#注销后执行顺序 1 3

运行结果:

这个模块一般用来在程序结束时,做资源清理。

应用场景一:

既能让程序报错,又能在报错已经还能运行clean()呢?

import atexit

@atexit.register
def clean():
   print('清理环境相关的代码')

def test():
   example = {"a": 1, "b": 2}
   print(example["c"])#程序报错
test()

运行结果:

 

 

这样一来,我们不需要显式调用clean函数了。无论程序正常结束,还是程序异常报错,clean函数里面的内容总会执行。

文章首发于微信公众号菜鸟童靴,不定期更新,如有需要后台加微信

 

官方文档:https://docs.python.org/zh-cn/3.7/library/atexit.html

参考链接:https://mp.weixin.qq.com/s/lNwSBhcp9ktwgaGWpXNq-A

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python进阶之atexit模块使用 的相关文章

随机推荐

  • Elasticsearch快速入门之狂薅官网系列之Aggregations-聚合(3)

    本文为翻译官网 Aggregations 部分但有一定改动之后的文章 官网地址 https www elastic co guide en elasticsearch reference 7 3 search aggregations ht
  • Android 5,kotlin循环for

    Unless required by applicable law or agreed to in writing software distributed under the License is distributed on an AS
  • LZW编解码算法原理及分析

    文章目录 数据压缩实验 三 一 LZW概述 二 LZW编解码原理 1 LZW编码 1 算法原理 2 算法流程 2 LZW解码 1 算法原理 2 算法流程 3 实验过程 1 数据结构分析 2 主函数 3 主要功能模块 4 实验结果 总结与分析
  • #ifndef 和#pragma once

    作用 为了避免同一个文件被include多次 C C 中有两种方式 一种是 ifndef方式 一种是 pragma once方式 在能够支持这两种方式的编译器上 二者并没有太大的区别 但是两者仍然还是有一些细微的区别 方式一 ifndef
  • 代码审计——BruteForce

    Low级别 源码 1 首先通过isset 函数判断是否接收到了GET型的Login的值 接收到了代表用户提交了数据 isset 函数 在实际开发中 isset 通常用于快速检查某个变量是否存在或为空 并且可以帮助避免一些未定义变量引起的错误
  • Vscode-Latex 报错 I found no \bibdata command

    问题描述 原本使用的是 bib文件引用文献 后来觉得不方便 不如写在文末 改用 bibitem 然后使用pdflatex gt bibtex gt pdflatex 2进行编译 接着报错 I found no bibdata command
  • 编译原理 --- NFA(非确定有限自动机)和DFA(确定有限自动机)之间的转换以及DFA的化简

    第一部分 证明NFA能够转换为DFA 1 So是NFA的初态集合 F是NFA的终态集合 2 通过上面的第一个转换 我们就使得NFA具有了和DFA一样的唯一初态 3 通过上面的第二个转换 不断引入中间状态 直到将字拆分为字符 此时我们就成功的
  • 日常工作中需要注意的Java编码规范

    经常听到 编码风格 这个词 那么什么是编码风格呢 接手项目后 读项目中其他人的代码 你就能感觉到不同编码风格 有的人写的代码很乱 可读性很差 方法逻辑处理耦合度很高 缩进不规范 有的人编码风格很好 代码缩进对齐看起来很规范 注释清晰 这就是
  • Python小屋在线练习与刷题软件重要升级

    开学第一课 一定不要这样问老师Python问题 中国大学MOOC Python程序设计基础 第6次开课时间 董付国老师Python系列教材推荐与选用参考 2022年4月13日 Python小屋刷题软件进行了升级 停用之前版本的客户端 请后台
  • matlab直方图显示,控制分类直方图的显示

    创建分类直方图 示例文件 outages csv 包含表示美国电力中断情况的数据 该文件包含六个列 Region OutageTime Loss Customers RestorationTime 和 Cause 以表的形式读取 outag
  • OpenGL基础知识梳理——Windows上搭建opengles运行环境

    1 概念介绍 1 OpenGLES 官方介绍 https www khronos org opengles OpenGLES OpenGL for embeded systems 是用于嵌入式设备的免费 跨平台的2D 3D渲染API 它是O
  • C++中cout、cin和endl的用法

    转自 http blog csdn net zhanghaotian2011 article details 8868577 转自 http blog csdn net u011675745 article details 51939108
  • 【最详细

    软件下载 软件 Visual C 版本 6 0 语言 简体中文 大小 34 26M 安装环境 Win11 Win10 Win8 Win7 硬件要求 CPU 2 0GHz 内存 4G 或更高 下载通道 百度网盘丨下载链接 https pan
  • 微信公众号开发《五》基于Java实现微信支付(公众号支付)简单教程

    最近公司需求 需要在微信公众号内完成支付 找到官方文档 文档还可以 讲的也挺详细 不过有一个地方很坑爹 就是微信内H5调起支付需要一个签名 而他给出的参考签名方式跟统一下单签名一致 害的我以为 他这个签名就是统一下单那个签名 后面找了很久看
  • 12-6 锁

    加锁可保证原子性操作和共享资源的可见性 但加锁成本相对较高 mingw 编译器下 可用 mtx t 定义一个锁 mtx init 函数初始化一个锁 mtx destory 函数销毁一个锁 mtx lock 函数加锁 mtx lock 函数解
  • ppt快速回到某页(幻灯片放映时)【实测成功】

    仅作为记录 感谢大佬博主文章 传送门 即 在幻灯片放映过程中 在键盘按一下需要跳转的页面编号 再按回车键就会快速跳转到那一页 在未放映时 点击office的ppt的右下角图标 在所有幻灯片中进行选择 双击即可
  • opencv之erode()函数

    概述 erode 函数可以对输入图像用特定结构元素进行腐蚀操作 该结构元素确定腐蚀操作过程中的邻域的形状 各点像素值将被替换为对应邻域上的最小值 API说明 C API void cv erode InputArray src 原始图像 通
  • 亚信科技荣任「DBL电信行业工作组」副组长单位,AntDB数据库连年入选《中国数据库产品图谱》

    日前 2023可信数据库发展大会 在京圆满召开 亚信科技凭借自研的电信级核心交易数据库AntDB在通信行业15年的技术积累和行业贡献 成功当选为数据库应用创新实验室 DBL 电信行业工作组副组长单位 AntDB数据库连续两年入选 全球数据库
  • vue应用全局音乐(自动播放)

    这里写自定义目录标题 1 从同事哪里白嫖过来的 主要是jq写的 需要单独引入jq cdn 2 打开index html 将代码放到里面
  • Python进阶之atexit模块使用

    微信搜索 菜鸟童靴 选择 关注公众号 我们一起开启Python进阶之旅 如何让Python在退出时强制运行一段代码 说起这个需求 我们就不得不说Python atexit模块了 退出处理器 atexit 模块定义了清理函数的注册和反注册函数