You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:50:23