finallyAdvanced 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