从函数返回值失败,返回 NoneType

Returning a value from a function failed with NoneType

我在从外部函数返回值时遇到问题。

函数:

def dijkstra(netzwerk,startpunkt,zielpunkt,punkt_geprueft=[],entfernungen={},vorgaenger={}):
    if startpunkt not in netzwerk:
        raise TypeError('Start- und/oder Zielpunkt nicht vorhanden')
    if zielpunkt not in netzwerk:
        raise TypeError('Zielpunkt kann nicht gefunden werden')
    if startpunkt == zielpunkt:
        weg_pfad=[]
        variable_fuer_vorgaenger=zielpunkt
        while variable_fuer_vorgaenger != None:
            weg_pfad.append(variable_fuer_vorgaenger)
            variable_fuer_vorgaenger=vorgaenger.get(variable_fuer_vorgaenger,None)
        return weg_pfad
        #print(weg_pfad)
    else :
        if not punkt_geprueft:
            entfernungen[startpunkt]=0
        for nachbarpunkt in netzwerk[startpunkt] :
            if nachbarpunkt not in punkt_geprueft:
                neue_entfernung = entfernungen[startpunkt] + netzwerk[startpunkt][nachbarpunkt]
                if neue_entfernung < entfernungen.get(nachbarpunkt,float('inf')):
                    entfernungen[nachbarpunkt] = neue_entfernung
                    vorgaenger[nachbarpunkt] = startpunkt
        punkt_geprueft.append(startpunkt)
        ungeprueft={}
        for k in netzwerk:
            if k not in punkt_geprueft:
                ungeprueft[k] = entfernungen.get(k,float('inf'))
        nd= min(ungeprueft, key=ungeprueft.get)
        dijkstra(netzwerk,nd,zielpunkt,punkt_geprueft,entfernungen,vorgaenger)

主要功能:

startpunkt = self.dlg.DStart.text()
zielpunkt = self.dlg.DEnd.text()
weg_pfad = dijkstra(netzwerk, startpunkt, zielpunkt)
print(weg_pfad)
self.dlg.OutputText.append(weg_pfad)
self.dlg.OutputText.append("Ergebnis für Dijkstra Algorithmus")

打印函数中的值weg_pfad给我一个值:['P5', 'P3']。 在 main 函数中打印值给我 None.

为什么会这样,我该如何解决?

下一步是返回多个值 -> weg_pfadentfernungen[zielpunkt]

您多次调用 dijkstra 函数。因此,虽然当您最终找到解决方案时它 return 具有一定的价值,但所有进入“else”子句的中间调用都将在没有任何 return 语句的情况下结束,因此 returning 默认为 None.

您需要通过使用 return 和函数的递归调用将最终值一直传递到调用链的顶部。