@Mind2077

Как игнорировать отсутствие значения в json?

Писал бота. Встала неприятная проблема: при удалении 1 переменной из json, код перестаёт корректно работать, тк не может найти этот ключ. Как можно решить это?
#магазин
@bot.command()
async def магазин(ctx):
    with open("shop.json","r") as json_file:
        a = json.load(json_file)
    emb=discord.Embed(title='Магазин',description='.купить [пинг роли/айди роли] - купить роль',color=discord.Colour.blurple())
    for i in range(len(a)):
        with open("shop.json") as f:
            b = json.loads(f.read())
        number = int(list(b.keys())[-1])
        if a[str(i+1)][2]["guild"] == str(ctx.guild.id):
            role=a[str(i+1)][0]["role"]
            price=a[str(i+1)][1]["price"]
            emb.add_field(name=f'**Товар: **',value=f'**Роль: <@&{role}>, цена: {price}**',inline=False)    
    await ctx.send(embed=emb)

код в котором возникает ошибка
#удаление из магаза
@bot.command()
async def deleteshop(ctx, role:discord.Role):
    with open("shop.json","r") as json_file:
        a = json.load(json_file)
    with open("shop.json") as f:
        b = json.loads(f.read())
    with open("db.json","r") as json_file:
        c = json.load(json_file)
    for i in range(len(a)):
        if str(role.id) in a[str(i+1)][0]["role"]:
            del a[str(i+1)]
            emb = discord.Embed(title='**-Оповещение-**',description='**Роль успешно удалена из магазина.**',color=discord.Colour.green())
            await ctx.send(embed=emb)
            with open("shop.json","w") as json_file:
                json.dump(a, json_file,indent=0)

код удаления из дб
spoiler
{
"1": [
{
"role": "943923969856241674"
},
{
"price": "123"
},
{
"guild": "864466654091804682"
}
],
"2": [
{
"role": "944248827370700880"
},
{
"price": "10000"
},
{
"guild": "864466654091804682"
}
],
"3": [
{
"role": "944215477956268082"
},
{
"price": "13000"
},
{
"guild": "864466654091804682"
}
],
"4": [
{
"role": "938738379212865547"
},
{
"price": "100000"
},
{
"guild": "938718264874373170"
}
]
}

Сама база данных
  • Вопрос задан
  • 226 просмотров
Пригласить эксперта
Ответы на вопрос 2
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Как-то так:
a = {"item1": 1, "item2": 3}

a.get('item1')  # существующий ключ
# 1
a.get('item3')  # несуществующий ключ. Исключение не будет вызвано - просто выведет None
# None
Ответ написан
@Mind2077 Автор вопроса
к слову, я попробовал сделать с 1 вариантом. Стало слегка лучше: теперь код адекватно работает до удалённой части дб, а потом просто забивает на остатки дб. Всё же лучше чем полная поломка команды, но не подходит
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы