Как правильно поместить if и else без контекстной ошибки?

import discord
from discord.ext import commands
from discord.ext.commands import Bot
import json
import os

bot = commands.Bot(command_prefix='$')
os.chdir(r'D:\Sublime Text 3\dis\test_systems\json_files')


@bot.command()
async def Buy(message):
    with open('coins.json', 'r') as f:
        users = json.load(f)

if users[str(user.id)]['coins'] > users[str(user.id)]['coinss']:
    await message.channel.send('Да')

    await update_data(users, message.author)
    await delete_coins(users, message.author, 5000)
    await Z(users, message.author)
    await send(message)

    with open('coins.json','w') as f:
        json.dump(users, f)

async def update_data(users, user):
    if not str(user.id) in users:
        users[str(user.id)] = {}
        users[str(user.id)]['coins'] = 0
        users[str(user.id)]['coinss'] = 15000

async def delete_coins(users, user, coin):
    users[str(user.id)]['coins'] -= coin

async def Z(users, user):
    users[str(user.id)]['coinss'] == 15000

async def send(message):
    await message.channel.send(f'Покупка завершена')    

    else:
        await message.channel.send('Нет')

Работа кода без if и else проходит нормально. Но выдаёт такую ошибку:

  File "cs.py", line 103
    else:
    ^
SyntaxError: invalid syntax

Как исправить?


Ответы (1 шт):

Автор решения: sedukh

Для того, чтобы исключить синтаксическую ошибку, необходимо придерживаться правилам табуляции и разместить else под if. Но, если Вам необходимо, чтобы все функции, которые я внёс внутрь if users[str(user.id)]['coins'] > users[str(user.id)]['coinss'], были вне if, то необходимо перенести else в место, когда заканчивается тело if.

@bot.command()
async def Buy(message):
    with open('coins.json', 'r') as f:
        users = json.load(f)

if users[str(user.id)]['coins'] > users[str(user.id)]['coinss']:
    await message.channel.send('Да')

    await update_data(users, message.author)
    await delete_coins(users, message.author, 5000)
    await Z(users, message.author)
    await send(message)

    with open('coins.json','w') as f:
        json.dump(users, f)

    async def update_data(users, user):
        if not str(user.id) in users:
            users[str(user.id)] = {}
            users[str(user.id)]['coins'] = 0
            users[str(user.id)]['coinss'] = 15000

    async def delete_coins(users, user, coin):
        users[str(user.id)]['coins'] -= coin

    async def Z(users, user):
        users[str(user.id)]['coinss'] == 15000

    async def send(message):
        await message.channel.send(f'Покупка завершена')    
else:
    await message.channel.send('Нет')
→ Ссылка