[ZODB-Dev] Typechecking oid in getitem

Christian Reis kiko at async.com.br
Mon May 19 14:41:39 EDT 2003


On Mon, May 19, 2003 at 01:16:26PM -0300, Christian Reis wrote:
> Note that many places we already do try: except KeyError, so maybe it
> would be a matter of changing KeyError to (KeyError, TypeError) in these
> places?

How does this look? I don't like the current output of POSKeyError very
much but at least it tells us more than an "unsliceable object":

I can make POSKeyError more beautiful ;) later.

Index: FileStorage.py
===================================================================
RCS file: /cvs-repository/ZODB3/ZODB/FileStorage.py,v
retrieving revision 1.132
diff -u -r1.132 FileStorage.py
--- FileStorage.py	16 May 2003 20:19:15 -0000	1.132
+++ FileStorage.py	19 May 2003 16:39:42 -0000
@@ -593,7 +593,7 @@
         "Read any version and return the version"
         try:
             pos=_index[oid]
-        except KeyError:
+        except (KeyError, TypeError):
             raise POSKeyError(oid)
         file.seek(pos)
         read=file.read
@@ -614,7 +614,7 @@
     def _load(self, oid, version, _index, file):
         try:
             pos = _index[oid]
-        except KeyError:
+        except (KeyError, TypeError):
             raise POSKeyError(oid)
         file.seek(pos)
         read = file.read
@@ -653,7 +653,7 @@
             read=file.read
             try:
                 pos = self._index[oid]
-            except KeyError:
+            except (KeyError, TypeError):
                 raise POSKeyError(oid)
             while 1:
                 seek(pos)
@@ -684,7 +684,7 @@
         try:
             try:
                 pos = self._index[oid]
-            except KeyError:
+            except (KeyError, TypeError):
                 raise POSKeyError(oid)
             file=self._file
             file.seek(pos)
@@ -1082,7 +1082,10 @@
     def getSerial(self, oid):
         self._lock_acquire()
         try:
-            return self._getSerial(oid, self._index[oid])
+            try:
+                return self._getSerial(oid, self._index[oid])
+            except (KeyError, TypeError):
+                raise POSKeyError(oid)
         finally:
             self._lock_release()
 
@@ -1370,7 +1373,10 @@
             file=self._file
             seek=file.seek
             read=file.read
-            pos=self._index[oid]
+            try:
+                pos=self._index[oid]
+            except (KeyError, TypeError):
+                raise POSKeyError(oid)
             wantver=version
 
             while 1:
@@ -1501,7 +1507,7 @@
         """
         try:
             pos = self._index[oid]
-        except KeyError:
+        except (KeyError, TypeError):
             return None
         self._file.seek(pos)
         # first 8 bytes are oid, second 8 bytes are serialno

Take care,
--
Christian Reis, Senior Engineer, Async Open Source, Brazil.
http://async.com.br/~kiko/ | [+55 16] 261 2331 | NMFL



More information about the ZODB-Dev mailing list