我想在Python程序完成时运行任务,但前提是它成功完成。据我所知,使用atexit模块意味着无论成功与否,我注册的函数将始终在程序终止时运行。是否有类似的功能来注册一个函数,以便它只在成功退出时运行?或者,我的退出功能有没有办法检测退出是正常的还是异常的?在
下面是一些代码来演示这个问题。它将打印出程序成功的消息,即使它失败了。在
import atexit
def myexitfunc():
print "Program succeeded!"
atexit.register(myexitfunc)
raise Exception("Program failed!")
输出:
^{pr2}$
开箱即用,
atexit
不太适合您想做的事情:它主要用于在最后一刻清理资源,因为程序正在关闭并退出。以此类推,它是try/except的“finally”,而您想要的是try/except的“else”。在我能想到的最简单的方法是继续创建一个全局标志,只有当脚本“成功”时才设置它。。。然后让所有附加到
atexit
的函数检查该标志,除非设置了它,否则什么都不做。在例如:
一个限制是,如果有任何代码在设置成功标志之前调用}。否则,需要在脚本的主入口点周围添加类似以下包装器的内容:
^{pr2}$sys.exit(0)
。这样的代码应该(可能)被重构以首先返回到主函数,这样您就只在一个地方调用set_success
和{在
with
语句中包装程序的主体,并定义一个相应的上下文对象,该对象仅在未引发异常时执行操作。比如:相关问题 更多 >
编程相关推荐