2013-01-23 22 views
3

所以下面的Python代碼的獲取錯誤:類型錯誤:「NoneType」對象有沒有屬性「的GetItem.pop()似乎被觸發Python中的類型錯誤,即使結果應該是一個列表

我不知道爲什麼列表'路徑1'沒有被識別爲列表,而是被識別爲NoneType。

我已經檢查了以前的Stack問題,使用Google搜索,所有這些,但我無法弄清楚它爲什麼會發生。 This來了close-ish(我認爲),但我不知道爲什麼我的狀態=路徑[-1]調用是出現這個錯誤。

有什麼想法?非常感激。

感謝

代碼:

import re 
import string 



gr = { 
    "A":["B","C","D"], 
    "B":["A","E"], 
    "C":["A","E"], 
    "D":["A","H","I","J"], 
    "E":["B","C","F","G","H"], 
    "F":["E"], 
    "G":["E","H"], 
    "H":["D","E","G","K"], 
    "I":["D","K","L"], 
    "J":["D","M"], 
    "K":["I","M","H"], 
    "L":["I"], 
    "M":["K","J"] 
    } 

def graphSearch(graph, start, dest): 
    frontier = [[start]] 
    explored = [] 
    options = [] 
    if frontier == []: return "I hope you enjoyed riding aboard the failboat" 
    while len(frontier)>0: 
     path = frontier.pop() 
     state = path[-1] 
     if state == dest: 
      return path 
     else: 
      for a in graph[state]: 
       if a not in path: 
        newP = path.append(a) 
        frontier.append(newP) 
    return options 



print graphSearch(gr, "A", "M") 

回答

5
newP = path.append(a) 
frontier.append(newP) 

追加不返回任何東西(它就地修改原始列表),那麼你風附加一堆None到列表中。

.pop()工作正常;這是state = path[1]失敗,因爲pop()彈出了您在上一次迭代中追加的其中一個None項目。

+0

謝謝了,我還沒有得到它的全部工作,但我切換「如果不在路徑中: newP = path.append(a) frontier.append(newP)」to「if a not in路徑: newP =路徑 newP.append(a) frontier.append(newP)「讓我通過typeerror障礙。欣賞它,歡呼! – BWStearns

+0

僅供參考,'newP = path'不會生成副本,因此您正在修改原始列表以及新的列表。如果你想要一個副本,你可以執行'newP = list(path)'或者'newP = path [:]'。 – Amber

相關問題