Python 总是调用 JSONDecodeError

Python JSONDecodeError is always called

我正在尝试保存 python 游戏的分数和硬币数量。格式如下所示:

{"score": score, "coins": coins}

其中变量 score 和 coins 代表不同的数字。我通过这样做保存这些数据:

with open(os.path.join(save_dir, 's.bin'), 'w') as save_file:
    json.dump(data, save_file)

并且输出是正确的,因为它是这样的(例如):

{"score": 34.060000000000166, "coins": 0}

在文件中。但是当游戏关闭并重新打开时,分数加载如下:

try:
    with open(os.path.join(save_dir, 's.bin')) as save_file:
        try:
            print("attempting to load file...")
            json.load(save_file)
            return json.load(save_file)
        except JSONDecodeError:
            print("JSON can't decode...")
            with open(os.path.join(save_dir, 's.bin'), 'w') as save_file_2:
                json.dump(data_layout, save_file_2)
                return data_layout
except FileNotFoundError:
    print("file not found...")
    with open(os.path.join(save_dir, 's.bin'), 'w') as save_file_3:
        json.dump(data_layout, save_file_3)
        return data_layout

其中 data_layout 是:{“score”: 0, “coins”: 0}。但是 JSONDecodeError 总是在启动时调用,所以它总是在启动时重置分数和硬币。它保存正确,但加载不正确。感谢所有帮助!

发布的代码中有两个问题。

  1. 在第一部分中,您尝试读取 JSON 文件两次。第二次,文件指针在文件末尾,JSON 加载程序无法获得有效 JSON。删除行 json.load(save_file) 它将正确 read/decode JSON 文件。

  2. 如果 json.load() 引发 JSONDecodeError 那么异常处理将在 with 代码块内,因此文件将在它尝试再次打开它进行写入时打开。最好在打开文件进行写入之前先关闭文件。

试试这样:

file = os.path.join(save_dir, 's.bin')
try:
    with open(file) as save_file:
        print("attempting to load file...")
        # json.load(save_file) # <-- remove this line
        return json.load(save_file)
except JSONDecodeError:
    print("JSON can't decode...")
    with open(file, 'w') as save_file_2:
        json.dump(data_layout, save_file_2)
    return data_layout
except FileNotFoundError:
    print("file not found...")
    with open(file, 'w') as save_file_3:
        json.dump(data_layout, save_file_3)
    return data_layout