NoneType对象不可迭代错误

时间:2016-05-15 08:51:48

标签: python append iterable nonetype

我的任务是为Dijkstra的算法编写类。虽然我不允许编辑Dijkstra类:

class Dijkstra():
# initialize with a string containing the root and a
# weighted edge list
def __init__(self, in_string):
    self.root, self.nnodes, self.adj_list = self.convert_to_adj_list(in_string)
    self.nodes = [Node(i) for i in range(self.nnodes)]
    self.nodes[self.root].key = 0
    self.heap = MinHeap(self.nodes)
# the input is expected to be a string 
# consisting of the number of nodes
# and a root followed by 
# vertex pairs with a non-negative weight
def convert_to_adj_list(self, in_string):
    nnodes, root, edges = in_string.split(';')
    root = int(root)
    nnodes = int(nnodes)
    adj_list = {}
    edges = [ map(int,wedge.split()) for wedge in edges.split(',')]
    for u,v,w in edges:
        (adj_list.setdefault(u,[])).append((v,w))
    for u in range(nnodes):
        adj_list.setdefault(u,[])

这是我的问题:

string = '3; 0; 1 2 8, 2 0 5, 1 0 8, 2 1 3'
print(Dijkstra(string))
Traceback (most recent call last):
  File "<pyshell#321>", line 1, in <module>
    print(Dijkstra(string))
  File "C:\Users\TheDude\Downloads\dijkstra.py", line 71, in __init__
    self.root, self.nnodes, self.adj_list = self.convert_to_adj_list(in_string)
TypeError: 'NoneType' object is not iterable

我是否指定append的返回值?如何在没有编辑的情况下修复它 class Djikstra() 坦克阅读。

1 个答案:

答案 0 :(得分:2)

为了分配

    self.root, self.nnodes, self.adj_list = self.convert_to_adj_list(in_string)

要工作,convert_to_adj_list必须返回三个值的元组才能解压缩到这三个变量中。但是,您的方法不返回任何内容(因此隐式返回None)。将您的convert_to_adj_list方法更改为类似的方法,然后它应该有效:

def convert_to_adj_list(self, in_string):
    ... your code ...
    return root, nnodes, adj_list