Python6 min read

Python Context Managers Advanced

Create advanced context managers for resource management.

David Miller
December 18, 2025
0.0k0

Advanced resource management.

Class-Based Context Manager

```python class Timer: def __enter__(self): import time self.start = time.time() return self def __exit__(self, *args): import time self.end = time.time() print(f"Time: {self.end - self.start:.4f}s")

with Timer(): sum([i for i in range(1000000)]) ```

Error Handling

```python class ErrorHandler: def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): if exc_type: print(f"Error: {exc_val}") return True # Suppress error return False

with ErrorHandler(): result = 10 / 0 # Error handled gracefully print("Program continues...") ```

Nested Context Managers

```python from contextlib import contextmanager, ExitStack

@contextmanager def open_file(name): f = open(name, 'w') try: yield f finally: f.close()

Open multiple files with ExitStack() as stack: files = [stack.enter_context(open_file(f"file{i}.txt")) for i in range(3)] for file in files: file.write("data") ```

Reusable Context Manager

```python from contextlib import contextmanager

@contextmanager def change_dir(path): import os old_dir = os.getcwd() os.chdir(path) try: yield finally: os.chdir(old_dir)

with change_dir("/tmp"): # Work in /tmp pass # Back to original directory ```

Remember

- __enter__ and __exit__ required - Return True in __exit__ to suppress errors - Use contextlib for simpler managers

#Python#Advanced#Context Managers