为什么用python加载.json文件会出错?

为什么用python加载.json文件会出错?,python,json,python-3.x,discord.py,Python,Json,Python 3.x,Discord.py,这适用于discord.py重写警告系统,该系统将警告数保存到warnings.json 我想这是一个加载文件的问题,但我不知道,如果有人能找到问题并解决它,那将是高度赞赏 @bot.command() @commands.has_角色(“Staff”) 异步定义警告(ctx,用户:discord.Member): 将open('warnings.json','r')作为f: users=json.load(f) 用户[f'{user.id}']['warns']+=1 等待更新_数据(用户,用

这适用于discord.py重写警告系统,该系统将警告数保存到warnings.json 我想这是一个加载文件的问题,但我不知道,如果有人能找到问题并解决它,那将是高度赞赏

@bot.command()
@commands.has_角色(“Staff”)
异步定义警告(ctx,用户:discord.Member):
将open('warnings.json','r')作为f:
users=json.load(f)
用户[f'{user.id}']['warns']+=1
等待更新_数据(用户,用户)
等待添加警告(用户,用户,+1)
将open('warnings.json','w')作为f:
dump(users,f,sort_key=True,sure_ascii=False,indent=4)
发送(f'Warned{user.notice}!')
错误是:

  File "/usr/local/lib/python3.7/dist-packages/discord/ext/commands/core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "/home/pi/bot.py", line 206, in warn
    users = json.load(f)
  File "/usr/lib/python3.7/json/__init__.py", line 296, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "/usr/lib/python3.7/json/__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.7/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.7/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/discord/client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "/home/pi/bot.py", line 278, in on_command_error
    raise error
  File "/usr/local/lib/python3.7/dist-packages/discord/ext/commands/bot.py", line 902, in invoke
    await ctx.command.invoke(ctx)
  File "/usr/local/lib/python3.7/dist-packages/discord/ext/commands/core.py", line 864, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "/usr/local/lib/python3.7/dist-packages/discord/ext/commands/core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: JSONDecodeError: Expecting value: line 1 column 1 (char 0)```

与回复相反,你不希望它是空的。您希望在JSON文件中包含
{}

为什么?


因为现在文件中有JSON数据,即使它是空的。如果没有这些花括号,JSON就不知道文件是否真的是JSON。

您的JSON文件大吗,如果不是,我希望看到它“期望值:第1行第1列(char 0)”意味着文件是空的。如果命令的一个实例正忙于加载,而另一个实例正在保存(写入之前,
w
模式会截断文件)。@AKX,它是空的,我应该怎么做才能让它工作?如果存在但为空,您可以:
users=json.loads(f.read()或{}')
返回到空的json对象。