Python标准库学习 (上)

在《Python高手之路》第二章,标准库这一章,讲到了一些必须了解的标准库模块,有一些,是我之前就用到过的,类似codecs的库(有相见恨晚的感觉);也有一些库,,属于没有接触过的,可以在《Python标准库》里进行查询到相应的介绍和应用。

1、atexit:允许注册在程序退出时调用的函数!(标准库14.11章)https://docs.python.org/2/library/atexit.html

那么,什么时候用atexit, os._exit(), sys.exit(), sys.exitfunc 那?

首先,os._exit() 和 sys.exit() 都是直接退出,后面代码不执行的;

import sys
 
print "hello"
 
sys.exit(1)
 
print "there"

代码退出,结果是 打印了 "hello"


区别在于, sys.exit()是触发了一个SystemExit 异常的,那么就可以捕获这个异常,来进行相应的操作;


import sys

print "hello"

try:
    sys.exit(1)
except SystemExit:
    print "world"
而 os._exit()是直接退出,后续代码不执行,调用的是C语言的 _exit()

另一个 sys.exitfunc,其实atexit后台代码就是调用了sys.exitfunc,这个是代码调用退出结束前,调用 

import sys
 
def exitfunc():
    print "world"
 
sys.exitfunc = exitfunc
 
print "hello"
sys.exit(1)
print "there"

这个代码,退出后,"there"是不会打印的,但是在退出前,后调用exitfunc,打印 "world"

而atexit是可以注册多个退出函数,并向注册的传递函数传递参数。这对于妥善的断开数据库连接,删除临时文件等可能很有用。不用为需要释放的资源维护一个特殊的列表,完全可以对于每个资源注册一个单独的清理函数。

import atexit


def my_clean(name):
    print 'my clean (%s)' % name
atexit.register(my_clean, 'first')
atexit.register(my_clean, 'second')
atexit.register(my_clean, 'third')

退出函数会按注册的逆序来调用,这个方法以模块导入顺序(相应的,也就是注册其atexit函数的顺序)的逆序完成模块的清理,这会减少依赖冲突。

my clean (third)
my clean(second)
my clean(first)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值