您好.. 我正在尝试建立一个升级系统,我在终端中没有收到任何错误,但 json 数据没有更新

Posted

技术标签:

【中文标题】您好.. 我正在尝试建立一个升级系统,我在终端中没有收到任何错误,但 json 数据没有更新【英文标题】:Hi there.. I'm trying to make a level up system and i don't get any errors in terminal but the json data doesn't updated 【发布时间】:2021-06-13 09:19:46 【问题描述】:

这是我的代码,正如我在终端中所说,没有错误但是,json 文件不会更新是的,我的 json 文件以 开头 我没有给出完整的代码,但只有必要的代码来检查..

@client.event
async def on_member_join(member):
  with open("users.json", "r") as f:
    json.load(f)
    users = await update_data(users, member)
  with open("users.json", "w") as f:
      json.dump(users, f)

@client.event
async def on_message(message):
  with open("users.json", "r") as f:
   users = json.load(f)
  await update_data(users, message.author)
  await add_experience(users, message.author, 5)
  await level_up(users, message.author, message.channel)
  with open("users.json", "w") as f:
    json.dump(users, f)

async def update_data(users, user):
  if not user.id in users:
    users[user.id] = 
    users[user.id]['experience'] = 0
    users[user.id]]'level"] = 1

async def add_experience(users, user, exp):
  users [user.id]["experience"] += exp

async def level_up(users , user , channel):
  experience = users[user.id]['experience']
  lvl_start = users[user.id]['level']
  lvl_end = int(experience ** (1/4))
  
  if lvl_start < lvl_end:
    await ctx.send(channel , ' has leveled up to level '.format(user.mention , lvl_end))
    users[str(user.id)]["level"] = lvl_end
  
  with open("users.json","w") as f:
    json.dump(users , f)

【问题讨论】:

为什么除了 level_up 例程之外的所有地方都使用user.id,你有str(user.id)?是字符串还是整数? 它是一个整数 那么不要使用str(user.id)。它与整数版本不匹配。 【参考方案1】:
async def on_member_join(member):
  with open("users.json", "r") as f:
    json.load(f)

这会加载您的 JSON 文件并将结果扔到地板上。你想要的:

async def on_member_join(member):
  with open("users.json", "r") as f:
    users = json.load(f)

您可以考虑编写“read_config”和“write_config”例程来封装它,以避免错误。

【讨论】:

以上是关于您好.. 我正在尝试建立一个升级系统,我在终端中没有收到任何错误,但 json 数据没有更新的主要内容,如果未能解决你的问题,请参考以下文章

(Mac 终端)尝试使用 RVM 安装最新的 ruby​​ 时出现“系统”消息

找不到发布文件的位置

Cordova iOs 错误

我正在尝试制作一个简单的 2d 平台游戏,但我的代码不会让我跳

手机系统版本或者CPU型号不兼容要怎么办?

监狱电教系统多终端同时播放的解决方案