From db298268e41bb61b801dc009a24a8687a561ed6c Mon Sep 17 00:00:00 2001 From: Alan Jenkins Date: Thu, 13 Aug 2015 11:02:00 +0100 Subject: [PATCH] Cleanup error-raising in added code At least one programmer is confused by my abuse of KeyError() as a sentinel value. Let's call the sentinel value _NotFound instead, and let's avoid re-creating it on each call. I have a new favourite line of code, "if item is _NotFound" :). Thanks to @ThomasWaldmann for all these review suggestions. --- attic/lrucache.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/attic/lrucache.py b/attic/lrucache.py index e02e1a6d0..0e1a2eea5 100644 --- a/attic/lrucache.py +++ b/attic/lrucache.py @@ -1,3 +1,6 @@ +class _NotFound: + pass + class LRUCache: def __init__(self, capacity, dispose): self._cache = {} @@ -7,9 +10,8 @@ class LRUCache: def __setitem__(self, key, value): assert key not in self._cache, ( - "Unexpected attempt to replace a cached item." - " If this is intended, please delete the old item first." - " The dispose function will be called on delete.") + "Unexpected attempt to replace a cached item," + " without first deleting the old item.") self._lru.append(key) while len(self._lru) > self._capacity: del self[self._lru[0]] @@ -28,11 +30,10 @@ class LRUCache: self._lru.remove(key) except ValueError: pass - error = KeyError(key) - removed = self._cache.pop(key, error) - if removed == error: - raise error - self._dispose(removed) + item = self._cache.pop(key, _NotFound) + if item is _NotFound: + raise KeyError(key) + self._dispose(item) def __contains__(self, key): return key in self._cache