3

したがって、次のPythonコードでエラーが発生します。TypeError:'NoneType'オブジェクトに属性がありません' getitem '

リスト「パス1」がリストとして認識されず、代わりにNoneTypeとして認識される理由がわかりません。

以前のStackの質問、グーグル、そのすべてをチェックしましたが、なぜそれが起こっているのか理解できません。これは(私が思うに)近づきましたが、私のstate =path[-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")
4

1 に答える 1

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

append は何も返さない (元のリストをその場で変更する) ため、Noneリストにたくさんの要素を追加することになります。

.pop()正常に動作します; 前回の繰り返しで追加した項目の 1 つがポップオフされstate = path[1]たため、失敗したのはです。pop()None

于 2013-01-23T04:52:25.230 に答える