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

时间:2019-06-04 06:54:53

标签: 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())

错误是:

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

NameError: name 'cointegration_mv' is not defined

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

2 个答案:

答案 0 :(得分:1)

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

<块引用>

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

Jupyter/Python Guide

答案 1 :(得分:0)

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