>
> Perhaps you could use try/finally:
>
> try:
> prepare()
> do_something_sensitive()
> finally:
> cleanup()
>
Well I actually would like to run the else block in case an exception did
occurred.
Let me provide an example from my use case which is the management of a
database transaction:
with savepoint(transaction_manager):
# Let's try to add into the database with some constraints.
obj = db.add(data)
db.flush()
else:
# Object already in database.
obj = db.get(data)
With the following context manager:
class savepoint(object):
def __init__(self):
self._sp = None
def __enter__(self, tm):
self._sp = tm.savepoint()
def __exit__(self, exc_ty, exc_val, tb):
if exc_ty is not None and issubclass(ecx_ty, IntegrityError):
self._sp.rollback()
# We have an exception, execute else block.
return False
# All good, we commit our transaction.
self._sp.commit()
return True
I find it quite a pretty, try and fail back way that I can easily replicate
in my code without having to prepare and clean up each time with a
try/catch.
>
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/V5FHTPRRHQBKMLFPCRLBHTRQGEB6WTMB/
Code of Conduct: http://python.org/psf/codeofconduct/