UnboundLocalError: локальная переменная, на которую ссылаются перед назначением Discord.py

#python #python-3.x #discord.py

Вопрос:

Я продолжаю получать эту ошибку и задавался вопросом, как ее исправить:

 @bot.event
async def on_message(message):
    if isinstance(message.channel, discord.channel.DMChannel) and message.author != bot.user:
         async with message.channel.typing():
             responses = ["word", "car"]
    await asyncio.sleep(1)
    await message.channel.send(f'{random.choice(responses)}')
 

ошибка, которую я получаю, заключается в следующем:
Игнорирование исключения в on_message

 Traceback (most recent call last):
  File "C:Python38libsite-packagesdiscordclient.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "C:UsersendleDocumentsMyDiscordBotbot.py", line 112, in on_message
    await message.channel.send(f'{random.choice(responses)}')
UnboundLocalError: local variable 'responses' referenced before assignment
 

Кто-нибудь может помочь?

Комментарии:

1. Что responses будет, если if isinstance(message.channel, discord.channel.DMChannel) . . . чек окажется ложным?

2. ответы-это переменная, которую я использую для случайного выбора строки и ее отправки

3. responses существует только как переменная, когда первое if утверждение истинно. Если значение false, переменная не создается, и вы получаете сообщение об ошибке.

4. Джон Гордон, Где я могу сделать свое утверждение «если» правдивым, Извините, я не лучший в python

Ответ №1:

Тебе нужна else . Без этого вы на самом деле не responses будете каждый раз определять переменную, поэтому, когда она переходит к последней строке вашего кода, вы выбираете случайный элемент из списка, которого не существует.

Вероятно, вам следует получить представление об элементарном Python, прежде чем задавать вопросы о переполнении стека. Некоторые люди могут быть не самыми дружелюбными!

Вот это discord.py документация от Rapptz.

Ответ №2:

Добавьте оператор else:, чтобы ответы всегда определялись.

быстрый пример реализации этого, так как вы сказали, что не очень хорошо знакомы с python:

 if isinstance(message.channel, discord.channel.DMChannel) and message.author != bot.user:
    async with message.channel.typing():
        responses = ["word", "car"]
elif message.author != bot.user:
    responses = ["insert thing here"]
else:
    responses = None
 

Комментарии:

1. Мой бот продолжает отвечать сам себе на это, если бы вы могли это исправить, это было бы неплохо. Извините

2. Это снова приводит к несвязанной локальной ошибке

3. Я глупый, одну секунду, вам придется проверить, нет ли ответов или нет, прежде чем пытаться вызвать его, но если вы это сделаете, это должно исправить это