IndentationError: unindent 不匹配任何外部缩进级别我什么都不明白

时间:2021-07-23 22:11:02

标签: python discord.py

我什么都不懂。我已经检查了所有内容,在 IDLE 中,我通过格式> tabify 区域翻译了制表符中的空格。它仍然不起作用。什么不是

File "bot.py", line 365
if if_do==True:
               ^  
IndentationError: unindent does not match any outer indentation level

短代码:

 if_do = True
                    if patron in ctx.message.author.roles:
                        await ctx.messsage.author.remove_roles(patron) 
                        await ctx.message.channel.send('И патрон потратил...')
                    break
            if if_do==True: 
                await ctx.message.channel.send('Чел, ты...А патрон...')

所有代码:

@bot.command(pass_context = True)
@commands.cooldown(1, 15, commands.BucketType.user) 
async def shot(ctx, member: discord.Member=None):
    if_do = False
    police = discord.utils.get(ctx.author.guild.roles, id=867662803968065586)
    armor = discord.utils.get(member.guild.roles, id=867692189106044939)
    dead = discord.utils.get(ctx.author.guild.roles, id=867692254746640394)
    hard_blood = discord.utils.get(ctx.author.guild.roles, id=867692258760196116)
    easy_blood = discord.utils.get(ctx.author.guild.roles, id=867692269054459954)
    gun = discord.utils.get(ctx.author.guild.roles, id=868069389365280818)
    patron = discord.utils.get(ctx.author.guild.roles, id=868228372222840913)
    if gun in ctx.message.author.roles:
        if patron in ctx.message.author.roles or police in ctx.message.author.roles:
                if member == None:
                    await ctx.message.channel.send('Выстрел в воздух...Бедная птичка..')
                    if patron in ctx.message.author.roles:
                        await ctx.messsage.author.remove_roles(patron)
                        await ctx.message.channel.send('И патрон потратил...')
                else:
                    mention = member.mention
                    veroyatnost = randint(1,10)
                    telo = ['левую ногу','левую руку','правую ногу','правую ногу','живот','плече','грудь']
                    if veroyatnost>6 and veroyatnost<=10:
                        res = 'В {} выстрелили! К счастью пуля не попала в цель.'.format(mention)
                    elif armor in member.roles:
                        res = 'В {} стреляли! К счастью на нем был бронежилет, который больше непригоден...'.format(mention)
                        await member.remove_roles(armor)
                    else:
                        if veroyatnost<3:
                            await member.add_roles(dead)
                            res = 'В {} выстрелили! Рана смертельная, поздравляю, вы умерли.'.format(mention)
                        elif veroyatnost>=3 and veroyatnost<=4 :
                            await member.add_roles(hard_blood)
                            res = 'В {} выстрелили! Ловкое попадание. Тяжелая рана. Выстрел в {}. Боль. '.format(mention,random.choice(telo))
                        elif veroyatnost>4 and veroyatnost <=6:
                            await member.add_roles(easy_blood)
                            res = 'В {} выстрелили! Чудом уклонившись он(а) получил(а) легкое рание в {}'.format(mention,random.choice(telo))
                    await ctx.message.channel.send(res)
                    if_do = True
                    if patron in ctx.message.author.roles:
                        await ctx.messsage.author.remove_roles(patron) 
                        await ctx.message.channel.send('И патрон потратил...')
                    break
            if if_do==True: 
                await ctx.message.channel.send('Чел, ты...А патрон...')
    else:
        await ctx.message.channel.send('Тебе не из чего стрелять!')

1 个答案:

答案 0 :(得分:0)

A diagrammed version of the indentation of Night Spirit's code. A red line indicates that the line in question does not align to any previous indentation level

我绘制了您的代码。看到抛出错误的行与之前的任何缩进不一致吗? Python 不知道如何处理它,所以它会抛出一个错误。一般来说,尽量让你的缩进总是有相同数量的空格,以避免这种情况。

考虑这两段代码:

a = 3
if a < 5:
        if a < 2:
            print("option 1")
        else:
            print("option 2")

这里,“else”是关于 if a < 2 语句的,因此将打印“选项 2”。比较一下:

a = 3
if a < 5:
        if a < 2:
            print("option 1")
else:
    print("option 2")

这里不会打印任何内容,因为 else 指的是 if a < 5 行。现在想象:

a = 3
if a < 5:
        if a < 2:
            print("option 1")
    else:
        print("option 2")

if 指的是哪个 else 语句?这是模棱两可的,所以 python 说“解决这个问题!”而不是猜测。