Python не изменяет глобальную переменную

У меня есть следующий код:

failure = ""
def walk(dictItems):
    returnVal = ""
    for key, item in dictItems.items():
        if isinstance(item,dict):
            walk(item)
        else:
            returnVal = returnVal +"<li>"+key+" : "+ item + "</li>"
        global failure
        failure = returnVal
dictItems={"personal_details":{"phone*":"","nationality*":"MW","id_number*":"","gender*":"MALE","title*":"MR","surname":"","marital_status*":"MARRIED","first_name*":"","dob*":"","id_type*":"BUSINESS.REG"},"residential_details":{"city":"","location":"","residence_physical_address":""}}
walk(dictItems)
print(failure)

failure переменная всегда равна null, несмотря на наличие значений в returningVal любая помощь?

О, я понял, вы сбрасываете каждый раз returnVal, поэтому когда вы присваиваете его failure пуст. Измените свой код следующим образом:

failure = ""
def walk(dictItems):
    for key, item in dictItems.items():
        if isinstance(item,dict):
            walk(item)
        else:
            global failure
            failure += "<li>"+key+" : "+ item + "</li>"
dictItems={"personal_details":{"phone*":"","nationality*":"MW","id_number*":"","gender*":"MALE","title*":"MR","surname":"","marital_status*":"MARRIED","first_name*":"","dob*":"","id_type*":"BUSINESS.REG"},"residential_details":{"city":"","location":"","residence_physical_address":""}}
walk(dictItems)
print(failure)

Я предполагаю, что вы выполняете итерацию по словарю с подсловарями, поэтому вызов walk при попадании в подсловарь устанавливает значение fail только для ключей и элементов подсловаря. Вы должны добавить, а не установить значение fail. Или функция walk() должна возвращать следующее:

    dictItems = {
        "key1":"item1",
        "key2":"item2",
        "key3":{
            "subkey1":"subitem1",
            "subkey2":"subitem2"
        },
        "key4":"item4"
    }
    
    def walk(dictItems):
        returnVal = ""
        for key, item in dictItems.items():
            if isinstance(item, dict):
                returnVal += walk(item)
            else:
                returnVal += "<li>"+key+" : "+ item + "</li>"
        return returnVal
    print(walk(dictItems))
Вернуться на верх