如何清理崩溃?

时间:2016-10-13 06:39:26

标签: python python-3.x crash code-cleanup

我希望在程序崩溃的情况下进行一些清理活动。我知道有些情况无法处理(例如SIGKILL),但我想尽可能多地介绍。

atexit模块是一个很好的候选人,但文档明确指出

  

当通过此模块注册的功能时不会被调用   当一个Python时,程序被Python处理的信号杀死   检测到致命的内部错误,或者调用os._exit()时。

是否有函数或python功能允许处理sys.exit()和未处理的异常程序终止? (这些是我关注的主要内容)

1 个答案:

答案 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