您好.. 我正在尝试建立一个升级系统,我在终端中没有收到任何错误,但 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 时出现“系统”消息