Переменная задаётся, но ничего не изменяется

В самом начале кода выполняется это:

import json
import os

e_version = 16
aqiq = True

Это часть кода, которая берёт из файла JSON информацию и делает её как переменные Python:

def loadPlugins():
    for folder in os.listdir("plugins"):
        f = open("plugins/" + folder + "/manifest.json")
        p = f.read()
        f.close()
        p = loads(p)
        name = p["name"]
        for item in plugins:
            if item == name:
                return
        author = p["author"]
        description = p["description"]
        main_file = p["main_file"]
        try:
            require_version = p["require_version"]
        except KeyError:
            require_version = True
        if require_version:
            if e_version < p["required_version"]["min"]:
                crit("E", f"Плагин '{name}' требует версию не ниже '{p['required_version']['min']}'")
            elif e_version > p["required_version"]["max"]:
                crit("E", f"Плагин '{name}' требует версию не выше '{p['required_version']['max']}'")
        f = open("plugins/" + folder + "/" + p["main_file"])
        p = f.read()
        f.close()
        p = loads(p)
        try:
            aqiq = p["Logic"]["allow_quotes_in_quotes"]
            print(p["Plugin"]["onload_message"].replace("{name}", name).replace("{author}", author).replace("{description}", description))
        except KeyError:
            pass
        plugins.append(name)

Теперь структура файлов и папок в паке plugins:

PluginExample
    main.json
    manifest.json

Файл manifest.json:

{
    "name": "Plug123",
    "author": "Werryx",
    "description": "Пример плагина",
    "main_file": "main.json",
    "required_version": {
        "min": 11,
        "max": 17
    }
}

Файл main.json:

{
    "Logic": {
        "allow_quotes_in_quotes": false
    },
    "Plugin": {
        "onload_message": "Плагин {name} загружен!\nАвтор: {author}"
    }
}

Если в самом конце loadPlugins() написать print(aqiq), то получится False, но если написать это после loadPlugins(), то в ответ будет True

Версия Python: 3.8 (PyCharm)


Ответы (1 шт):

Автор решения: passant

Вы учебники по Python читали? Про глобальные переменные что-то знаете? У вас aqiq вне функции loadPlugins() и aqiq внутри функции loadPlugins() - это две разные переменные. Поэтому и выводит один раз то значение, которое имеет локальная aqiq (False), а второй раз - значение глобальной переменной, которое, естественно не изменилось и осталось True. Я не знаю, что вам в действительности надо, но если это одна и та же переменная, то опишите ее внутри функции как глобальную.

→ Ссылка