创建多个对象将变为无对象

2024-09-30 16:26:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建多个图形并使用Dijkstra的。但是我得到了一个错误:NoneType对象没有属性“set\u distance”。非常奇怪的是,列表中的第一项['2001A1']运行正常,但是当列表长度超过1时,它就会因为错误而崩溃。如果我只在列表中的一个项目上运行代码,它也可以工作。打印出我的顶点,图表显示有我的所有关键点的顶点实例。。。有什么我不知道的吗?为什么我不能这样做不止一次?为什么当我试图获取我的顶点对象时,当我的顶点映射有键{1:(vertex object)}时,返回null?你知道吗

def create_graph(q,y,pop,psub,a,b,c):
    a = Graph(q,y,pop,psub,a,b,c)
    for i in range(0,9):
        a.add_vertex(i)
    return a


def run_dijkstras(graph,data):
    for i in data:
        try:
            year = int(i[0:4])
            print year
        except:
            print i
        rest = i[4:]
        graph.add_edge(year,rest)

    quarter = graph.get_quarter()
    print graph.vert_dict
    print quarter
    print graph.get_vertex(quarter)
    print str(graph.get_vertex(quarter))
    dijkstra(graph,graph.get_vertex(quarter))
    target = graph.get_vertex(quarter+4)
    path = [target.get_id()]
    shortest(target, path)
    if len(path) == 1:
        path = "NULL"
    return [path,(str(target.get_distance())),data]

i = 2001
for j in range(1,5):
        for datacombo in ([['2001A1'], ['2001R4']]):
            a = run_dijkstras(create_graph(j,i,10,1,.05,-.1,-.5),datacombo)
            result,score = a[0],a[1]
            if score == 9999999999999:
                score = "NULL"
            score = score.ljust(15)

            datacombo = generate_matrix(datacombo)

            i = str(i).ljust(5)
            j = str(j).ljust(2)
            datacombo=re.sub("\[|\]|'","",str(datacombo)).ljust(100)
            result=re.sub("\[|\]|'","",str(result)).ljust(25)
            print(i,j,result,score,datacombo)

错误日志:

{0: <__main__.Vertex instance at 0x0000000002439DC8>, 1: <__main__.Vertex instan
ce at 0x0000000002439CC8>, 2: <__main__.Vertex instance at 0x0000000002439C88>,
3: <__main__.Vertex instance at 0x0000000002439C08>, 4: <__main__.Vertex instanc
e at 0x0000000002439E48>, 5: <__main__.Vertex instance at 0x0000000002439E88>, 6
: <__main__.Vertex instance at 0x0000000002439EC8>, 7: <__main__.Vertex instance
 at 0x0000000002439F08>, 8: <__main__.Vertex instance at 0x0000000002439F48>}
1
None
None
Traceback (most recent call last):
  File "dijkstras3.py", line 282, in <module>
    a = run_dijkstras(create_graph(j,i,10,1,.05,-.1,-.5),datacombo)
  File "dijkstras3.py", line 190, in run_dijkstras
    dijkstra(graph,graph.get_vertex(quarter))
  File "dijkstras3.py", line 132, in dijkstra
    start.set_distance(0)
AttributeError: 'NoneType' object has no attribute 'set_distance'

Tags: pathinstanceingetmainatgraphvertex