파일 핸들이 이미 딕셔너리 안에 있으면 이 코드는 딕셔너리를 단 한 번만 읽는다. 파일 핸들이 없으면 get을 사용해 딕셔너리를 한 번 읽고, try/except 블록의 else 절에서 핸들을 딕셔너리에 대입한다(아이템 80 “try/except/else/finally의 각 블록을 잘 활용하라” 참조). read 메서드를 호출하는 부분은 open을 호출하고 예외를 처리하는 코드와 명확히 분리되어 있다.
이와 같은 로직을 구현하기 위해 in 식이나 KeyError를 사용한 접근 방법을 택할 수도 있지만 오히려 딕셔너리를 더 많이 읽고, 내포되는 블록 깊이가 더 깊어지는 단점이 있다. in이나 KeyError를 사용한 방법이 잘 동작한다는 사실을 알고 나면 setdefault를 활용한 방법도 잘 작동하리라고 생각하기 쉽다.