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 总是在启动时调用,所以它总是在启动时重置分数和硬币。它保存正确,但加载不正确。感谢所有帮助!
发布的代码中有两个问题。
在第一部分中,您尝试读取 JSON 文件两次。第二次,文件指针在文件末尾,JSON 加载程序无法获得有效 JSON。删除行 json.load(save_file)
它将正确 read/decode JSON 文件。
如果 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
我正在尝试保存 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 总是在启动时调用,所以它总是在启动时重置分数和硬币。它保存正确,但加载不正确。感谢所有帮助!
发布的代码中有两个问题。
在第一部分中,您尝试读取 JSON 文件两次。第二次,文件指针在文件末尾,JSON 加载程序无法获得有效 JSON。删除行
json.load(save_file)
它将正确 read/decode JSON 文件。如果
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