Python I';我在分配任务前被引用了

Python I';我在分配任务前被引用了,python,discord.py,Python,Discord.py,我发现了一个似乎无法修复的错误,因为前几天我添加了一个更新。错误是在赋值之前引用了局部变量。我不确定这里有什么问题?有人能帮忙吗 line 243, in on_reaction_add if has_message is not None: UnboundLocalError: local variable 'has_message' referenced before assignment 代码 基本上,您没有初始化变量在内存中有\u message。 就这样加上吧 async def o

我发现了一个似乎无法修复的错误,因为前几天我添加了一个更新。错误是在赋值之前引用了局部变量。我不确定这里有什么问题?有人能帮忙吗

line 243, in on_reaction_add
if has_message is not None:
UnboundLocalError: local variable 'has_message' referenced before assignment
代码


基本上,您没有初始化变量
在内存中有\u message
。 就这样加上吧

async def on_reaction_add(self, reaction, user):
        has_message = None
        server = reaction.message.server
        msg = reaction.message
        if server.id not in self.settings:
            return
        if msg.channel.id in self.settings[server.id]["ignore"]:
            return
        if not await self.check_roles(user, msg.author, server):
            return
        react =self.settings[server.id]["emoji"]
        if react in str(reaction.emoji):
            threshold = self.settings[server.id]["threshold"]
            count = await self.get_count(server, msg)
            if await self.check_is_posted(server, msg):
                channel = self.bot.get_channel(self.settings[server.id]["channel"])
                msg_id, count = await self.get_posted_message(server, msg)
                if msg_id is not None:
                    msg_edit = await self.bot.get_message(channel, msg_id)
                    await self.bot.edit_message(msg_edit, new_content="{} **#{}**".format(reaction.emoji, count-1))
                    return
            if count < threshold and threshold != 0:
                store = {"original_message":msg.id, "new_message":None,"count":count+1}
                for message in self.settings[server.id]["messages"]:
                    has_message = None
                    if msg.id == message["original_message"]:
                        has_message = message
                if has_message is not None:
                    self.settings[server.id]["messages"].remove(has_message)
                    self.settings[server.id]["messages"].append(store)
                    dataIO.save_json("data/star/settings.json", self.settings)
                else:
                    self.settings[server.id]["messages"].append(store)
                    dataIO.save_json("data/star/settings.json", self.settings)
                return
            if threshold == 0:
                count = 2
            # else:
async def on_reaction_add(self、reaction、user):
has_message=无
server=reaction.message.server
msg=reaction.message
如果server.id不在self.settings中:
返回
如果self.settings[server.id][“ignore”]中的msg.channel.id:
返回
如果不等待self.check_角色(用户、msg.author、服务器):
返回
react=self.settings[server.id][“emoji”]
如果在str中react(reaction.emoji):
threshold=self.settings[server.id][“threshold”]
计数=等待自我。获取计数(服务器,消息)
如果等待自检,请检查是否已发布(服务器,消息):
channel=self.bot.get_channel(self.settings[server.id][“channel”])
msg\u id,count=等待self.get\u posted\u消息(服务器,msg)
如果msg_id不是None:
msg\u edit=等待self.bot.get\u消息(频道,msg\u id)
等待self.bot.edit_消息(msg_edit,new_content=“{}**}{}**”.format(reaction.emoji,count-1))
返回
如果计数<阈值和阈值!=0:
存储={“原始消息”:msg.id,“新消息”:无,“计数”:计数+1}
对于self.settings[server.id][“messages”]中的消息:
has_message=无
如果msg.id==消息[“原始消息”]:
has_message=消息
如果has_消息不是None:
self.settings[server.id][“messages”].remove(has_message)
self.settings[server.id][“messages”].追加(存储)
save_json(“data/star/settings.json”,self.settings)
其他:
self.settings[server.id][“messages”].追加(存储)
save_json(“data/star/settings.json”,self.settings)
返回
如果阈值==0:
计数=2
#其他:

在循环中声明该变量。这意味着,如果没有循环迭代,它就不会被定义。因此,
self.settings[server.id][“messages”]
为空。请删除所有与意大利面完全无关的部分。我知道,但这并不意味着所有其他部分都与问题相关。至少解释为什么OP试图访问它时它是未定义的。并修复不均匀压痕。
if has_message is not None:
    self.settings[server.id]["messages"].remove(has_message)
    self.settings[server.id]["messages"].append(store)
    dataIO.save_json("data/star/settings.json", self.settings)
async def on_reaction_add(self, reaction, user):
        has_message = None
        server = reaction.message.server
        msg = reaction.message
        if server.id not in self.settings:
            return
        if msg.channel.id in self.settings[server.id]["ignore"]:
            return
        if not await self.check_roles(user, msg.author, server):
            return
        react =self.settings[server.id]["emoji"]
        if react in str(reaction.emoji):
            threshold = self.settings[server.id]["threshold"]
            count = await self.get_count(server, msg)
            if await self.check_is_posted(server, msg):
                channel = self.bot.get_channel(self.settings[server.id]["channel"])
                msg_id, count = await self.get_posted_message(server, msg)
                if msg_id is not None:
                    msg_edit = await self.bot.get_message(channel, msg_id)
                    await self.bot.edit_message(msg_edit, new_content="{} **#{}**".format(reaction.emoji, count-1))
                    return
            if count < threshold and threshold != 0:
                store = {"original_message":msg.id, "new_message":None,"count":count+1}
                for message in self.settings[server.id]["messages"]:
                    has_message = None
                    if msg.id == message["original_message"]:
                        has_message = message
                if has_message is not None:
                    self.settings[server.id]["messages"].remove(has_message)
                    self.settings[server.id]["messages"].append(store)
                    dataIO.save_json("data/star/settings.json", self.settings)
                else:
                    self.settings[server.id]["messages"].append(store)
                    dataIO.save_json("data/star/settings.json", self.settings)
                return
            if threshold == 0:
                count = 2
            # else: