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