Donc, il n'y a pas d'erreur et pas de problème, mais il ne changera que le fichier JSON? Heres le code: p>
xxx pré> blockQuote>
4 Réponses :
json.load () code> lit le flux de fichiers et renvoie un dictionnaire.
Si vous souhaitez modifier la valeur dans le fichier, vous devez ouvrir le fichier en mode écriture et utiliser
json.dump () code> pour réécrire le fichier.
with open('users.json', 'w+') as f:
json.dump(users, f)
Je peux voir deux problèmes. P>
Tout d'abord votre seconde, vous n'écrivez jamais votre expérience ajoutée dans le fichier. Donc, vous mettez à jour le point d'expérience et oubliez-le dès que vous exécutez sur les deux fonctions parce que vous ne l'écrivez jamais. P>
Peut-être que vous avez eu une faute de frappe dans la 2e fonction et que vous ne vouliez pas lire le fichier à nouveau et écrivez plutôt les points dans le JSON? P> async def add_experience (utilisateurs, membre, exp): code> prend déjà un paramètre utilisateurs. Mais vous ouvrez à nouveau le fichier JSON et chargez l'utilisateur de nouveau. p>
Il peut y avoir une erreur dans l'ouverture du fichier. Il est préférable d'utiliser essayer / sauf dans votre code. Ensuite, s'il y a une erreur, vous pouvez voir cela.
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)
Si ce n'est pas trop une peine pourriez-vous le modifier directement parce que je passe du mal à submerger
La réponse donnée par Mixno est exactement ce que j'ai dit. Je viens d'expliquer une autre façon de déboguer votre code lorsque vous travaillez avec des fichiers. en utilisant cela est facultatif.
Essayez ceci:
@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)
On m'a dit de mettre CTX comme le premier param, mais cela ne fonctionne pas non plus. pas d'erreur