2016-04-01 58 views
0

我正在编写一个程序,用线性探测形成不同大小的哈希表。在我的线性ADT探测我有一个功能高清插入(),这是从我的主要脚本调用从以下功能:Python:“'Nonetype'是不可迭代的”没有任何迭代

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 

我得到这个代码的第二行nonetype错误。最后,_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()函数,这样的错误,看到没有迭代与键发生。

但是我确实知道我的散列表在表的初始化的每个槽中都有'None',可能有一些问题呢?

+0

(c + startLoc)<(self._size -1)在第一次迭代中可能为False,并且您没有返回大小写。我想你没有考虑过这种情况。 – FatmaT

回答

3

您的_findSlot(self, key)函数可以在没有返回语句的情况下完成。 (具体来说,如果您的while条件变为false并且循环结束,则会发生这种情况。)在这种情况下,函数将返回None。如果您尝试分配(found, slot)的值None,您会收到错误Nonetype is not iterable

你可能需要弄清楚你的函数在返回None时应该返回什么。

相关问题