嗨,我在写作时遇到了一个齿轮(机器人模块)这个小问题,我不断收到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)
如果有人可以告诉我这里发生了什么以及我哪里出错了,我将非常感激。
答案 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: