[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