SyntaxError:语法无效,但discord.NotFound除外:

时间:2018-08-27 20:39:07

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

嗨,我有点语法错误,我不确定这是缩进错误还是except discord.NotFound的错误使用

这是我在控制台中遇到的错误

File "C:\Users\Tom\Documents\adiscordhelper\cogs\star.py", line 119
except discord.NotFound:
     ^
SyntaxError: invalid syntax

这是我使用异常并要处理代码中错误的方式,以下是代码段。

 @commands.command(pass_context=True)
@checks.mod_or_permissions()
async def star(self, ctx, msg_id):
    """Manually add message to the starboard follows same restrictions
       does not have a threshold"""
    server = ctx.message.server
    channel = ctx.message.channel
    user = discord.utils.get(server.members)
    msg = await self.bot.get_message(channel, msg_id)
    author = msg.author
    if server.id not in self.settings:
        return
    if msg.channel.id in self.settings[server.id]["ignore"]:
        return

    emoji =self.settings[server.id]["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(new_content="{} your post made it to the star **{}** board! :raised_hands:".format(author.mention, emoji))
            return

    # else:
    channel2 = self.bot.get_channel(id=self.settings[server.id]["channel"])
    em = await self.build_embed(msg)
    post_msg = await self.bot.send_message(channel2, "{} your post made it to the {} board! :raised_hands:".format(author.mention, emoji, 1), embed=em)
    modpush = "{} added {}'s post to {} :star2:".format(user.mention, author.name, channel2.mention)
    await self.bot.send_message(channel, modpush)
    await self.bot.delete_message(ctx.message)
except discord.NotFound:
    await self.bot.send_message("Message not found.")
    past_message_list = self.settings[server.id]["messages"]
    past_message_list.append({"original_message":msg.id, "new_message":msg.id, "count":1})
    dataIO.save_json("data/star/settings.json", self.settings)

我不确定我在哪里出问题了,因此您的帮助将不胜感激。

编辑添加try语句:

channel2 = self.bot.get_channel(id=self.settings[server.id]["channel"])
    em = await self.build_embed(msg)
    post_msg = await self.bot.send_message(channel2, "{} your post made it to the {} board! :raised_hands:".format(author.mention, emoji, 1), embed=em)
try:
    modpush = "{} added {}'s post to {} :star2:".format(user.mention, author.name, channel2.mention)
    await self.bot.send_message(channel, modpush)
    await self.bot.delete_message(ctx.message)
except discord.NotFound:
    await self.bot.send_message("Message not found.")
    past_message_list = self.settings[server.id]["messages"]
    past_message_list.append({"original_message":msg.id, "new_message":msg.id, "count":1})
    dataIO.save_json("data/star/settings.json", self.settings)

2 个答案:

答案 0 :(得分:1)

问题是因为try语句放置在错误的位置。

它应该像这样:

 @commands.command(pass_context=True)
@checks.mod_or_permissions()
async def star(self, ctx, msg_id):
    """Manually add message to the starboard follows same restrictions
       does not have a threshold"""
    try:
        server = ctx.message.server
        channel = ctx.message.channel
        user = discord.utils.get(server.members)
        msg = await self.bot.get_message(channel, msg_id)
        author = msg.author
        if server.id not in self.settings:
            return
        if msg.channel.id in self.settings[server.id]["ignore"]:
            return

        emoji =self.settings[server.id]["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(new_content="{} your post made it to the star **{}** board! :raised_hands:".format(author.mention, emoji))

    # else:
        channel2 = self.bot.get_channel(id=self.settings[server.id]["channel"])
        em = await self.build_embed(msg)    
        post_msg = await self.bot.send_message(channel2, "{} your post made it to the {} board! :raised_hands:".format(author.mention, emoji, 1), embed=em)
        await self.bot.send_message(channel, "{} added {}'s post to {} :star2:".format(user.mention, author.name, channel2.mention))
        await self.bot.delete_message(ctx.message)
        past_message_list = self.settings[server.id]["messages"]
        past_message_list.append({"original_message":msg.id, "new_message":msg.id, "count":1})
        dataIO.save_json("data/star/settings.json", self.settings)
    except discord.NotFound: 
        await self.bot.send_message("Message not found.")

您还需要在此行之后删除return语句:

await self.bot.edit_message(new_content="{} your post made it to the star **{}** board! :raised_hands:".format(author.mention, emoji))

答案 1 :(得分:0)

except块告诉python如果关联的try块失败了该怎么办。您没有try块,因此会引发语法错误。