Python JSON文件IO问题:读取JSON后全局data变量仍为空
问题:读取JSON文件后全局
data变量始终为空列表? 你遇到的情况很典型——当选择读取JSON时,全局的data还是空列表,但在load函数内部打印却能拿到正确的数据。这其实是Python的变量作用域在搞鬼!
问题根源
在你的load函数里,这句代码:
data = json.load(file)
Python会默认把这里的data当作一个局部变量来创建,而不是去修改你在函数外定义的全局data列表。所以当load函数执行完毕,这个局部的data就被销毁了,全局的data完全没被更新,自然还是初始的空列表。
两种解决方案
方案1:用global关键字声明全局变量
直接在load函数里告诉Python:我要修改的是全局的data,不是局部变量。修改后的load函数如下:
def load(): global data # 声明此处使用的是全局变量data with open('portfolio.json', 'r') as file: data = json.load(file)
方案2:让load函数返回数据,调用时赋值(更推荐)
依赖全局变量会让代码耦合度变高,可读性变差。更优雅的方式是让load函数返回读取到的JSON数据,然后在main里把返回值赋值给全局data:
def load(): with open('portfolio.json', 'r') as file: return json.load(file) # 返回读取到的数据 def main(): global data choice = input("Do you want to add vals? (y/n): ") if choice == 'y': add('btc', 43.2) add('xrp', 256.5) add('xmr', 655.3) print(data) write() if choice == 'n': data = load() # 将返回值赋值给全局data print(data)
验证效果
修改后再运行程序,选择n的时候,data就会正确显示JSON文件里的内容了。
内容的提问来源于stack exchange,提问作者Sam Autrey
相关产品推荐
相关产品推荐

