当前位置:  开发笔记 > 编程语言 > 正文

应用程序范围的异常处理程序是否有意义?

如何解决《应用程序范围的异常处理程序是否有意义?》经验,为你挑选了2个好方法。

长话短说,我有一个相当大的Python应用程序,除其他事项外,不outcalls为"losetup",Linux上的"摩的",等等.基本消耗必须在完成时释放的系统资源.

如果我的应用程序崩溃,我想确保正确释放这些系统资源.

做以下事情是否有意义?

def main():
    # TODO: main application entry point
    pass

def cleanup():
    # TODO: release system resources here
    pass

if __name__ == "__main__":
    try:
        main()
    except:
        cleanup()
        raise

这通常是做什么的吗?有没有更好的办法?也许是单例类中的析构函数?



1> Bob King..:

我喜欢一般的顶级异常处理程序(无论语言如何).它们是清理资源的好地方,这些资源可能与引发异常的方法内部消耗的资源无法立即相关.

如果您有这样的框架,它也是记录这些异常的理想场所.顶级处理程序将捕获您未计划的那些奇怪的异常,并允许您在将来更正它们,否则,您可能永远不会知道它们.

请注意,您的顶级处理程序不会抛出异常!



2> Thomas Woute..:

析构函数(在__del__方法中)是一个坏主意,因为这些不能保证被调用.里的AtExit模块是一个安全的做法,但如果Python解释器崩溃(而不是Python应用程序),或者如果使用os._exit()这些仍然不火,或进程正在积极被杀,或机器重新启动.(当然,在您的情况下,最后一项不是问题.)如果您的进程容易崩溃(例如,它使用变幻无常的第三方扩展模块),您可能希望在简单的父进程中进行清理更加孤立.

如果您并不担心,请使用atexit模块.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有