이제 get 메서드가 in 연산자보다 빠르다는 것을 알았다. 그렇다면 파이썬 프로그램에서 흔히 쓰이는 스타일인 예외를 잡아 처리하는 방식은 어떨까(아이템 32 “None을 반환하기보다는 예외를 발생시켜라” 참조)?
$ python3 -m timeit \
--setup='my_dict = {"key": 123}' \
'try: my_dict["key"] except KeyError: pass' # 여기서 엔터 누름
20000000 loops, best of 5: 10.6 nsec per loop
놀랍게도 딕셔너리에 이미 존재하리라 예상되는 키를 조회할 때는 KeyError 예외를 잡는 방식이 가장 빠르다. 키가 존재하지 않을 경우 예외를 발생시키고 이를 처리하는 데 추가적인 연산이 필요함에도 불구하고, 이 방법이 가장 빠르게 동작하는 것은 의외의 결과다. 이와 같은 비직관적인 성능 특성은 왜 파이썬 코드를 최적화하기 전에 반드시 프로파일링과 마이크로벤치마크를 수행해 가정을 테스트하는 것이 중요한지를 잘 보여준다.