Jupyter没有找到Python类

时间:2016-07-07 14:37:43

标签: python jupyter jupyter-notebook

非常基本的Jupyter问题:

我在Jupyter笔记本中有两个单元格。两者都没有名字(两者都没有名为Perceptron.py - 我不知道如何命名)

一个人就是这样开始的:

class Perceptron(object):

而另一个是这样的:

from Perceptron import Perceptron

我收到此错误:

ImportError: No module named Perceptron

很明显,我还没有将第一个单元命名为Perceptron.py,"但我不知道该怎么做。或者,目录不是类路径的一部分。解决这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

关于“命名”单元格的评论建议您将单元格视为单独的文件;但是,Jupyter笔记本单元不是单独的文件 - 它们是同一文件的一部分。

如果你正在写一个python脚本,你会声明你的类,然后像这样执行你的类:

class Foo:
    def __init__(self):
        self.Bar = "win!"

foo = Foo()
print(foo.Bar)

笔记本是相同的,但您可以选择将代码分成不同的单元格来组织代码:

# Cell 1
class Foo:
    def __init__(self):
        self.Bar = "win!"

# Cell 2
foo = Foo()
print(foo.Bar)

将代码分解为单元格还允许您以与在常规脚本中不同的顺序执行代码。因此,如果您尚未执行声明Perceptron类的代码,则无法实例化Perceptron实例。

调试问题的另一种方法是合并看似行为不端的单元格。将所有代码放在同一个单元格中没有任何问题。如果您的代码无法一起使用,那么您的代码就会出现问题。一旦你开始工作,你就可以将代码分成不同的单元格。

答案 1 :(得分:2)

由于您没有名为func (w *Widget) AllParents() []*Widget { var parentWidgets []*Widget x := w.Parent() parentWidgets = append(parentWidgets, x) y := x.Parent() parentWidgets = append(parentWidgets, y) ... return parentWidgets } 的文件,因此您不需要为此执行Perceptron.py语句。 Jupyter笔记本中的单元格可以使用彼此的变量。您只需点击一个单元格,然后按importshift即可“运行”它。

如果您在该单元格中有一个类(如Perceptron),则应该可以从同一笔记本中的任何其他单元格访问它。

在另一个单元格中,你应该能够做到:

enter