Irmen de Jong wrote: > On 24-7-2015 16:57, Neal Becker wrote: >> I have code like: >> >> if (condition): >> do_something_needing_cleanup >> >> code_executed_unconditionally >> >> <cleanup has to happen here if required, even if above did return, >> continue or exception> >> >> Now, how can I make sure cleanup happens? Actually, what I really would >> like, is: >> >> if (condition): >> do_something_needing_cleanup >> register_scoped_cleanup (cleanup_fnc) >> >> code_executed_unconditionally >> >> >> So, any thoughts/hopes of python being able to do something like this? >> >> I know we have try/finally, but I don't think that helps here, because >> code_executed_unconditionally couldn't be inside the try. Or am I >> missing something obvious? >> > > Sounds like you want a context manager, see > https://docs.python.org/3/library/contextlib.html#replacing-any-use-of-try-finally-and-flag-variables > > Irmen
Yes, that looks great! I'm using py2.7.10, so I tried 'contexter' package. if (condition): with ExitStack() as stack: if condition: do_something() def cleanup_resources(): some_cleanup_using_closure() stack.callback(cleanup_resources) unconditionally_executed_code_no_worrying_about_cleanup() -- https://mail.python.org/mailman/listinfo/python-list