yield 앞은 준비, 뒤는 정리
@contextmanager는 정확히 한 번 yield하는 제너레이터를 컨텍스트 관리자로 바꿔. yield한 값은 as에 묶이고, with 본문의 예외는 yield 자리로 들어오므로 정리는 try/finally에 둬야 해.
표준 도구로 흔한 모양을 줄여
suppress는 의도한 특정 예외만 무시하고, ExitStack은 실행 중 개수가 정해지는 여러 컨텍스트를 쌓아 역순으로 풀어. closing은 close 메서드만 가진 객체에 수명 경계를 줘.
정리 중 본문 예외를 잡아 삼키면 class 기반 __exit__가 참을 돌린 것과 같으니, 억제가 목적이 아니라면 그대로 전파해.