2016-04-01 94 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時應該返回什麼。

相關問題