register cleanup handler
Neal Becker
ndbecker2 at gmail.com
Fri Jul 24 13:35:12 EDT 2015
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()
More information about the Python-list
mailing list