我正在编写程序以使用线性探测形成不同大小的哈希表。在我的线性探测的ADT中,我有一个函数def insert(),它从我的主脚本中调用以下函数:
def insertHashTable( loadNum, hashTable ):
i = 0
while i < ((loadNum*size)-1):
hashTable.insert(data[i],data[i])
i = i + 1
return hashTable
错误本身来自于从insertHashTable()
调用的此函数def insert( self, key, value ):
( found, slot ) = self._findSlot( key ) #ERROR HERE
if not found :
self._table[slot] = _MapEntry( key, value ) #custom datatype
self._count += 1
return not found
我在这段代码的第二行得到了非类型错误。最后,_findSlot()如下:
def _findSlot( self, key ):
startLoc = self._hash1( key )
self.slotsAccessed += 1
if self._table.__getitem__( startLoc ) == None:
return (False, startLoc)
else:
c = 0
while (c+startLoc) < (self._size -1):
if self._table[startLoc+c] == None:
return (False, startLoc+c)
elif self._table.__getitem__( startLoc ).key == key:
return (True, startLoc+c)
c = c + 1
self.slotsAccessed += c
我不确定为什么insertHashTable()函数会出现这样的错误,因为密钥没有发生迭代。
但我知道我的哈希表有“无”#39;在表初始化的每个槽中,可能存在一些问题吗?
答案 0 :(得分:3)
您的_findSlot(self, key)
函数可以在没有return语句的情况下完成。 (具体来说,如果您的while
条件变为false并且循环结束,则会发生这种情况。)在这种情况下,函数将返回None
。如果您尝试分配(found, slot)
值None
,则会收到错误Nonetype is not iterable
。
你可能需要弄清楚你的函数在当前返回None
的情况下应返回的内容。