> > 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 -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/V5FHTPRRHQBKMLFPCRLBHTRQGEB6WTMB/ Code of Conduct: http://python.org/psf/codeofconduct/