finally — Advanced Examples
Block that always executes after try/except, used for cleanup
finally with generators and break
Edge cases where finally still runs.
python
# finally in generators def gen_with_cleanup(): try: yield 1 yield 2 yield 3 finally: print("Generator cleanup!") # Close triggers finally g = gen_with_cleanup() print(next(g)) print(next(g)) g.close() # triggers finally print() # finally runs even with break for i in range(5): try: if i == 2: break print(f" i={i}") finally: print(f" finally for i={i}")
Expected Output
1 2 Generator cleanup! i=0 finally for i=0 i=1 finally for i=1 finally for i=2
finally runs even when a generator is closed, when a loop is broken, or when sys.exit() is called. It truly always executes.
Want to try these examples interactively?
Open Advanced Playground