UnboundLocalError:在分配局部变量“ emoji_count”之前引用

时间:2018-10-02 19:14:08

标签: python-3.x attributes discord discord.py discord.py-rewrite

嗨,我在写作时遇到了一个齿轮(机器人模块)这个小问题,我不断收到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 :(得分:0)

当您在if reaction.emoji == '⭐' or reaction.emoji == '':中的if语句条件未返回True时,emoji_count将不会被初始化
emoji_count = reaction.message.reactions[0].count
因此,当您尝试使用它在if emoji_count > 0:下的几行时,会导致
 local variable 'emoji_count' referenced before assignment就是它的意思,python无法在运行的代码中的任何地方找到变量的初始化

答案 1 :(得分:-1)

我认为这是下面的内容:

  if emoji_count >= 2 : 
                if not chan:
                    return True

答案 2 :(得分:-2)

如先前的回答所述,应该为

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