Forráskód Böngészése

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.
Alan Jenkins 10 éve
szülő
commit
db298268e4
1 módosított fájl, 9 hozzáadás és 8 törlés
  1. 9 8
      attic/lrucache.py

+ 9 - 8
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