Python退出处理程序 (atexit)
atextit是Python中的一个模块,它包含两个函数register()
和unregister()
。该模块的主要作用是在解释器终止时执行清理。注册的函数在解释器终止时自动执行。每当程序被Python未处理的信号杀死时,调用os.exit()
或检测到Python致命内部错误时,通过此模块注册的函数都不会执行。
- register():注册函数将函数作为参数,在解释器终止时执行。如果有多个函数作为参数传递,例如 (fun1(), fun2()..),那么执行将按相反的顺序 (...fun2(), fun1())。执行发生在后进先出 (LIFO) 概念中。
Syntax: atexit.register(fun, *args, **kwargs)
Parameters: First the function name is mentioned and then any arguments for that function is passed. The parameters are separated using ‘, ‘.
Return: This function returns the called fun and hence the calling can be traced.
注意:这个函数也可以用作装饰器。
# 示例 1:
# Python program to demonstrate # atexit module import atexit names = ['Geeks', 'for', 'Geeks'] def hello(name): print (name) for name in names: # Using register() atexit.register(hello, name)
输出 :
Geeks for Geeks
# 示例 2:使用 register 作为装饰器
# Python program to demonstrate # atexit module import atexit # Using register() as a decorator @atexit.register def goodbye(): print("GoodBye.")
输出 :
GoodBye.
- unregister():
unregister()
函数从程序中定义的函数中删除指定的乐趣。它提供了当解释器终止时不会调用 fun 的保证。Syntax: atexit.unregister(fun)
Parameters: The function may or may not contain any parameter. If any present then the fun name is to be specified.
Return: No return.
例子:
# Python program to demonstrate # atexit module import atexit names = ['Geeks', 'for', 'Geeks'] def hello(name): print (name) for name in names: # Using unregister() atexit.unregister(hello)
输出 :
No Output