Функция возврата не работает - значение new_node печатается внутри, но при возврате не возвращает его

      def function():
    res = get_nodes(api_server_call, token)
    newnode = ""
    #endTime = ""
    for node in res:
        if (node['state'] == "booting" or node['state'] == "queued"):
            newnode = node['name']
            print("new node is : " + newnode)
            return newnode
    if(newnode == ""):
        function()


new_node = function() >this is main function from where above function is called
print(new_node)

Вышеупомянутая функция возвращает мне новый узел, который загружается или находится в очереди, я получаю его при печати, но при возврате он возвращает None

1 ответ

Нет возврата - это поведение по умолчанию, когда вы не помещаете оператор возврата в конец своей функции. Если функция имеет несколько способов завершения, вы должны заканчивать каждый путь кодирования возвратом или помещать его в конец. Если ваш новый узел не пуст, вы ничего не делаете, поэтому возвращается значение по умолчанию None. Конечно, безопаснее помещать действительный оператор возврата в конец каждого пути кода:

Итак, вы забыли лишний «return newnode» в последней строке функции:

      def function():
    res = get_nodes(api_server_call, token)
    newnode = ""
    #endTime = ""
    for node in res:
        if (node['state'] == "booting" or node['state'] == "queued"):
            newnode = node['name']
            print("new node is : " + newnode)
            return newnode

    if(newnode == ""):
        return function()

    return newnode


## main part of the code:
new_node = function() ##>this is main where function is called
print(new_node)
Другие вопросы по тегам