Python создание локальной переменной вместо использования глобальной переменной - PullRequest
0 голосов
/ 12 июля 2020

Я создаю бота Discord, но я думаю, что это больше связано с Python, чем с discord.py

У меня есть эта функция, созданная для идентификации участника сервера:

async def targetIdentificator(ctx):
    targetArgument = ctx.message.content.lower().replace(">target", "")

    for member in ctx.message.guild.members:
        if targetArgument.lower() in member.name.lower():
            targetID = member.id
            targetName =  targetArgument
            print("targetID")
    if targetID != "":
        return targetID
    else:
        return None

И примерно 200 строк выше в коде, я определяю две переменные как таковые:

targetName = ""
targetID = ""

Я использовал эти переменные много раз на протяжении всего кода, в различных других функции. В этой функции происходит следующее: когда я упоминаю targetID, он ссылается на новую локальную переменную вместо ссылки на глобальную переменную. Поэтому, если оператор if внутри цикла for никогда не выполняется, я получаю следующую ошибку:

UnboundLocalError: local variable 'targetID' referenced before assignment

Это, вероятно, действительно простая ошибка, и я прошу прощения, если так, но я был Я так долго почесываю голову об этом и, кажется, не могу понять почему ...

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Используйте ключевое слово global , чтобы явно указать Python, что вы имеете в виду глобальную переменную внутри функции, например:

async def targetIdentificator(ctx):
    global targetID
    global targetName

    targetArgument = ctx.message.content.lower().replace(">target", "")

    for member in ctx.message.guild.members:
        if targetArgument.lower() in member.name.lower():
            targetID = member.id
            targetName =  targetArgument
            print("targetID")
    if targetID != "":
        return targetID
    else:
        return None
1 голос
/ 12 июля 2020

Чтобы изменить глобальную переменную внутри локальной функции, вам нужно указать python, что переменная глобальная, с помощью оператора global

В этом случае это должно выглядеть примерно так:

async def targetIdentificator(ctx):
    global targetID
    global targetName
    ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...