Для Loop игнорируется при запуске асинхронной функции (Discord Bot с использованием Python API) - PullRequest
0 голосов
/ 16 сентября 2018

Я создаю диссон-бота, который проверяет, есть ли определенный ключ в моей базе данных или нет.Все ключи перечислены в первом столбце моего CSV-файла.Строка значения [2] содержит логический параметр, который сообщает пользователю, активирован ли ключ или нет.Моя проблема в том, что второй цикл for полностью игнорируется.Вместо запуска цикла for он напрямую пытается запустить await client.send_message(message.author, status), который, очевидно, вызывает следующее исключение

Локальная переменная 'status', на которую ссылается перед присваиванием

@client.event
async def on_message(message):

    elif message.content.startswith("!activate"):
        with open('database.csv', 'rt') as csvfile:
            content = csv.reader(csvfile, delimiter=',')
            key_list = []
            for row in content:
                key_list.append(row[0])
            key = message.content.split(" ")[1]
            try:

                if key in key_list:

                    for row in content:
                        print(row[0])
                        if row[0] == key:
                            print(row[2])
                            status = row[2]
                    await client.send_message(message.author, status)
                else:
                    await client.send_message(message.author, "Your key was not found in our database. Make sure you use the proper format: ```!activate KEY```")  
            except Exception as E:
                print(E)
                await client.send_message(message.author, "Your key was not found in our database. Make sure you use the proper format: ```!activate KEY```")

Спасибо всем заранее.

1 Ответ

0 голосов
/ 16 сентября 2018

У вас есть это условие в вашем коде:

if row[0] == key:
    print(row[2])
    status = row[2]

status больше нигде не определено, поэтому, если row[0] не равно key, status не определено.

Что должно быть status в этом случае?

...