我希望在程序崩溃的情况下进行一些清理活动。我知道有些情况无法处理(例如SIGKILL
),但我想尽可能多地介绍。
atexit
模块是一个很好的候选人,但文档明确指出
当通过此模块注册的功能时不会被调用 当一个Python时,程序被Python处理的信号杀死 检测到致命的内部错误,或者调用os._exit()时。
是否有函数或python功能允许处理sys.exit()
和未处理的异常程序终止? (这些是我关注的主要内容)
答案 0 :(得分:0)
SIGKILL
cannot be handled,无论怎样,你的程序都被终止(被暴力杀死),你无能为力。
关于SIGKILL
,您唯一能做的就是在下次启动程序时查找需要清理的数据 。
对于其他情况,使用atexit
来处理Python的解释器正常终止。如果您有一些未处理的异常,请查看它们可能发生的位置并将这些代码包装在try/except
块中:
try:
pass
except ValueError as e:
pass
except:
# catch other exceptions
pass
要处理sys.exit
调用,您可以在try/except
块中包含整个程序的起点并捕获SystemExit
异常:
try:
# your program goes here
# you're calling your functions from here, etc
except SystemExit:
# do cleanup
raise