Jupyter Notebook 中的变量仅在单元格内有效

Gri*_*ins 6 python jupyter-notebook

我有一个在 jupyter 的一个单元格中使用的变量,但是当我在下一个单元格中调用它时,它说找不到该变量

我尝试在从子文件读取数据之前创建变量的实例。我尝试创建另一个与第一个变量相同的变量,并在下一个单元格中使用该变量。

if os.path.isfile("cointegration.json"):
    with open("cointegration.json", "r") as f:
        cointegration_mv = json.load(f)
else:
    cointegration_mv = {}
    for i in range(0, len(usd_pairs)):
        pair_i = usd_pairs[i]
        print(pair_i)
        for j in range(0, i):
            pair_j = usd_pairs[j]
            print("\t+",pair_j)
            if pair_i != pair_j:
                code = pair_i + '_' + pair_j
                print("\t\t=",code)
                cointegration_mv[code] =  get_cointegration(pair_i, pair_j)

    json = json.dumps(cointegration_mv)
    f = open("cointegration.json","w")
    f.write(json)
    f.close()

print(cointegration_mv.keys())

#This does print the keys

#The next cell
print(cointegration_mv.keys())
Run Code Online (Sandbox Code Playgroud)

错误是:

NameError                                 Traceback (most recent call last)
<ipython-input-15-7abb854e8cc9> in <module>
----> 1 print(cointegration_mv.keys())

NameError: name 'cointegration_mv' is not defined
Run Code Online (Sandbox Code Playgroud)

即使当我在读入数据之前创建变量的实例(因此我希望键为空),以及当我尝试复制变量并传递副本时,也会发生这种情况。

小智 14

我知道这个问题已有 2 年历史了,但对于遇到此问题的 Jupyter Notebook 新手来说,您很可能必须运行之前的单元格,以便 Jupyter 初始化/声明/存储之前的变量。每当您运行一个单元格时,它不会自动运行其他单元格并获取以前的变量。正如下面的指南最好地解释的那样:

请注意,在 Jupyter Notebook 中,重要的是单元的执行顺序,而不是它们出现的顺序。Python 将记住之前运行的所有代码,包括您定义的任何变量,无论笔记本中的顺序如何。因此,如果您在笔记本下方定义变量,然后(重新)向上运行单元格,则下方定义的变量仍将存在

Jupyter/Python 指南


小智 0

可能是第一个单元格中声明的变量在本地范围内。这就是为什么在第二个单元格中调用时未定义为错误。尝试将代码放入第一个单元格的函数中,然后在第二个单元格中调用该函数