UnboundLocalError: Ссылка перед назначением локальной переменной 'emoji_count' - PullRequest
0 голосов
/ 02 октября 2018

Привет, у меня была эта проблема с cog (модулем бота) при записи, и я продолжаю получать UnboundLocalError: Referenced before assignment Я знаю, что это очень распространенная проблема, однако я не вижу проблемы.

Модуль работает, но каждый раз, когда на пост реагируют со звездочкой, он сбрасывает эту ошибку в консоли.

Ошибка:

starboard.py", line 22, in on_reaction_add if emoji_count > 0: #if 0 then 1 counts UnboundLocalError: local variable 'emoji_count' referenced before assignment

Более конкретная область, на которую я смотрю:

async def on_reaction_add(self, reaction, user):

    for guild in self.bot.guilds:
        chan = get(guild.channels, name="starboard")
        if chan:
            if reaction.message.author == user:
                return
            if reaction.emoji == '⭐' or reaction.emoji == '?':
                if not chan:
                    return
                emoji_count = reaction.message.reactions[0].count
                msg = f"{reaction.message.author.mention} your post was posted to starboard." 
                em = discord.Embed(color=discord.Color(random.randint(0x000000, 0xFFFFFF)))
                display = f"""{reaction.message.content}"""
                em.description = display
                em.set_author(name=reaction.message.author.name, icon_url=reaction.message.author.avatar_url)
                em.set_footer(text=f"Posted in: #{chan.name}")
                em.timestamp = dt.datetime.utcnow()
            try:
                img_url = reaction.message.attachments[0].url
            except IndexError:
                img_url = None
            if not img_url:
                try:
                    img_url = reaction.message.embeds[0].url
                except IndexError:
                    img_url = None
            if img_url:
                em.set_image(url=str(img_url))
            if emoji_count > 0: #if 0 then 1 counts
                if not chan:
                    return
                await chan.send(msg)
                await chan.send(embed=em)

Если кто-то может сказатьЯ, что здесь происходит, и где я иду не так, я очень ценил это.

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Как сказано в предыдущих ответах, оно должно быть

if reaction.emoji == '⭐' or reaction.emoji == '?' is True:

0 голосов
/ 03 октября 2018

Я думаю, что здесь говорится следующее:

  if emoji_count >= 2 : 
                if not chan:
                    return True
0 голосов
/ 02 октября 2018

Когда ваше условие if в if reaction.emoji == '⭐' or reaction.emoji == '?': не возвращает True, emoji_count не будет инициализировано
(emoji_count = reaction.message.reactions[0].count)
Так что, когда вы попытаетесь использовать его пару строкниже в if emoji_count > 0: это вызывает
local variable 'emoji_count' referenced before assignment, что в точности так и говорит, python не может найти инициализацию вашей переменной где-либо в коде, который запускает

...