为什么我的代码不起作用但也没有任何错误?

时间:2019-12-15 10:54:58

标签: python json discord discord.py

  

所以没有错误,没有问题,只是不会更改json文件?这是代码:

@client.command()
@commands.check(is_owner)
async def points_give(member: discord.Member, amount:int=None):
    with open("users.json", "r") as f:
        users = json.load(f)
        await add_experience(users, member, amount)

async def add_experience(users, member, exp):
    with open('users.json', 'r')as f:
        users = json.load(f)
        users[member.id]["experience"] += exp```

4 个答案:

答案 0 :(得分:1)

尝试一下:

@client.command()
@commands.check(is_owner)
async def points_give(member: discord.Member, amount:int=0):
    with open("users.json", "r") as f:
        users = json.load(f)
    await add_experience(users, member, amount)

async def add_experience(users, member, exp):
    users[member.id]["experience"] += exp
    with open('users.json', 'w+') as f:
        json.dump(users, f)

答案 1 :(得分:0)

json.load()读取文件流并返回字典。 如果要更改文件中的值,则需要以写入模式打开文件,然后使用json.dump()重写文件。

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

答案 2 :(得分:0)

我可以看到两个问题。

首先,您的async def add_experience(users, member, exp):已经接受了一个参数用户。但是您再次打开json文件并重新加载用户。

第二,您永远不要将添加的体验写回到文件中。因此,您更新体验点后就立即执行这两个功能,就不必再去理会了,因为您永远不会回写它。

也许您在第二个函数中有一个错字,并且不想重新读取文件,而是将这些点写回到json中?

答案 3 :(得分:0)

打开文件时可能会出现一些错误。最好在代码中使用try / except。然后,如果有错误,您可以看到。

def Check(file):
    try:
      open(file, "w")
      return 1
    except IOError:
      print ("Error: File does not exist.")
      return 0
    Except:
      print ("Error")
      return 0

在您的部队中

result = Check("yourFileName")
if (result == 1):
      #Do what you want

要添加到json数据:

dict = {key_value_to_be_added}

with open('filename', 'r') as f:
    data = json.load(f)

data.update(dict)
with open('filename', 'w+') as f:
    json.dump(data, f)