자원의 시작과 정리를 한 블록으로 관리합니다.
with는 블록 진입과 종료 시점에 정해진 동작을 실행합니다. 파일, 잠금, 데이터베이스 트랜잭션처럼 반드시 정리해야 하는 자원에 사용하며 예외가 발생해도 종료 동작이 호출됩니다.
예제에서 with resource() as value: ... 부분부터 찾으세요. 값을 만드는 표현식과 그 값을 다음 문장으로 넘기는 흐름을 한 줄씩 따라가면 실행 결과를 스스로 설명할 수 있습니다.
클래스의 __enter__/__exit__ 또는 contextlib.contextmanager와 yield로 만들 수 있습니다. __exit__ 반환값이 참이면 예외를 억제하므로 신중해야 합니다.
트랜잭션 컨텍스트는 성공 시 commit, 실패 시 rollback 규칙을 한곳에 두어 일부만 저장되는 상태를 막습니다.
이 코드는 브라우저의 실제 Python에서 실행됩니다. 먼저 현재 결과를 확인한 뒤 소요 시간을 재는 컨텍스트 매니저로 바꿔보세요.
정리 코드를 try 뒤에만 쓰면 중간 예외에서 실행되지 않습니다. finally나 with를 사용하세요.
직접 바꿔보세요소요 시간을 재는 컨텍스트 매니저로 바꿔보세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.