我已经定义了一个函数,如下所示:
def test_create_dataframe(df):
cols=set(df.columns)
return cols
当我将此函数放入Jupyter笔记本并调用它时,它会返回它应该的内容,即:
{'Name', 'accno', 'idno'}
但是,当我创建一个Python模块,导入它,并通过Jupyter笔记本调用该函数时,我收到此错误:
9 def test_create_dataframe(df):
10 cols=set(df.columns)
---> 11 return cols
12
13
AttributeError: 'list' object has no attribute 'intersection'
有人可以解释原因吗?
答案 0 :(得分:0)
您看到的问题是由于底层的iPython实现。如果你:
然后,如果你得到回溯,你可能会得到一些非常奇怪的结果。我并不完全确定错误行和显示的文本是如何编织在一起的(行号是正确的,但它显示的那些行号的代码与实际模块不匹配)。当您修改了导入的模块时,可靠的解决方法是重新启动基础iPython内核,但这并不总是实用的。您可以在here
上找到更多详细信息该帖子的修正:
有几种方法可以解决此问题。
1)最简单也是最肯定的是重启ipython内核 更改导入的模块后。但这也有缺点, 特别是丢失了ipython命名空间中存在的数据 任何其他进口模块。
2)对于简单的情况,你可以使用python的重载功能。 (这个 函数是在Python 2中构建的。从Python 3.4开始,它是 从标准模块" importlib")导入。在很多情况下,这个 编辑模块后就足够了。在此简要描述 有关Stack Overflow和其他在线更详细的讨论。
3)对于更复杂的情况,重新加载你拥有的模块 编辑还要求重新加载其依赖/导入的模块 (例如,因为必须将它们初始化为已编辑模块的一部分 初始化),ipython的自动加载扩展可能很有用。看到 http://ipython.readthedocs.org/en/stable/config/extensions/autoreload.html 包括页面底部的重要警告。