[Raymondo] > > The original code does its contortions to avoid raising a KeyError > > whenever the dictionary entry might have disappeared due to the > > ref count falling to zero and then a new, equal key was formed later. [Timbot] > Sorry, I can't picture what you're trying to say. Show some code? Python 2.3b1 (#40, Apr 25 2003, 19:06:24) [MSC v.1200 32 bit (Intel)] on win32 Type "copyright", "credits" or "license" for more information. IDLE 0.8 -- press F1 for help >>> class C: pass >>> import weakref >>> wkd = weakref.WeakKeyDictionary() >>> del wkd[C()] >>> # No complaints Python 2.3b1+ (#40, May 23 2003, 00:08:36) [MSC v.1200 32 b Type "help", "copyright", "credits" or "license" for more i >>> class C: pass ... >>> import weakref >>> wkd = weakref.WeakKeyDictionary() >>> del wkd[C()] Traceback (most recent call last): File "<stdin>", line 1, in ? File "C:\PY23\lib\weakref.py", line 167, in __delitem__ del self.data[ref(key)] KeyError: <weakref at 006BC600; to 'instance' at 006BAA30> >>> # Complains now. [Raymond] > > If the data disappeared, then, I think ref(key) will return None [Timbot] > No, ref(x) never returns None, regardless of what x may be. It may raise > TypeError if x is not of a weakly referencable type, and it may raise > MemoryError if we don't have enough memory left to construct a weakref, but > those are the only things that can go wrong. [Current version of the docs] """ ref( object[, callback]) Return a weak reference to object. The original object can be retrieved by calling the reference object if the referent is still alive; if the referent is no longer alive, calling the reference object will cause None to be returned. """ Raymond Hettinger
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4