Задать вопрос
@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"
}
]
}

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

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

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

Похожие вопросы