首页 > 解决方案 > 如何写入一个空的json文件?

问题描述

我是一名初学者,正在学习用 python 编码。我目前正在尝试学习 json。我正在开发一个简单的程序来存储您喜欢的号码。

这是代码:

import json

def get_new_favorite_number():
    favorite_number = input('please enter your favorite number')
    filename = 'favorite_number.json'
    with open(filename, 'w') as f_obj:
        json.dump(favorite_number, f_obj)

def get_favorite_number():
    filename = 'favorite_number.json'
    with open(filename) as f_obj:
        favorite_number = json.load(f_obj)
    return favorite_number

def tell_favorite_number():
    favorite_number = get_favorite_number()
    if favorite_number: 
        print('your favorite number is ' + str(favorite_number))
    else:
        favorite_number = get_new_favorite_number()


tell_favorite_number()

如果我尝试运行代码,我会收到此错误:

Traceback (most recent call last):
  File "favorite_number.py", line 23, in <module>
    tell_favorite_number()
  File "favorite_number.py", line 16, in tell_favorite_number
    favorite_number = get_favorite_number()
  File "favorite_number.py", line 12, in get_favorite_number
    favorite_number = json.load(f_obj)
  File "C:\Python\lib\json\__init__.py", line 293, in load
    return loads(fp.read(),
  File "C:\Python\lib\json\__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "C:\Python\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 1)

但是如果我在 favoritenumber.json 中输入一个数字,例如 43,然后再次运行程序,程序运行成功,我得到这个输出:

your favorite number is 43

你能解释一下为什么会发生这种情况,以及如何在不需要以前的数据的情况下使程序成功运行吗?

标签: pythonjson

解决方案


tell_favorite_number()尝试更换

favorite_number = get_favorite_number()

try:
    favorite_number = get_favorite_number()
except:
    favorite_number = 0

推荐阅读