我定义了一个函数,如下所示:
def test_create_dataframe(df):
cols=set(df.columns)
return cols当我把这个函数放入木星笔记本并称之为它时,它会返回它应该做的事情,即:
{'Name', 'accno', 'idno'}但是,当我创建一个Python模块,导入它,并通过木星笔记本调用函数时,我会得到以下错误:
9 def test_create_dataframe(df):
10 cols=set(df.columns)
---> 11 return cols
12
13
AttributeError: 'list' object has no attribute 'intersection'谁能解释一下原因吗?
发布于 2018-04-09 21:28:10
您所看到的问题是由于底层的iPython实现。如果你:
然后你会得到一些非常奇怪的结果,如果你得到回溯。我不太清楚错误的行和显示的文本是如何编织在一起的(行号是正确的,但它为这些行号显示的代码与实际模块不匹配)。可以肯定的是,当您修改了导入的模块时,可以重新启动底层iPython内核,但这并不总是实用的。您可以找到关于这个这里的更多细节。
该职位的修正如下:
有几种方法可以解决这个问题。 1)最简单和最确定的方法是在更改导入模块后重新启动ipython内核。但这也有缺点,特别是丢失了ipython命名空间和任何其他导入模块中存在的数据。 2)对于简单的情况,可以使用python的重载函数。(这个函数是在Python 2中内置的,从Python3.4开始,它是从标准模块“importlib”导入的)。在许多情况下,这在编辑模块之后就足够了。在本文对堆栈溢出和在线其他地方的讨论中将对此进行更详细的描述。 3)对于更复杂的情况,在重新加载已编辑的模块时,还需要重新加载其依赖/导入的模块(例如,因为它们必须作为已编辑模块初始化的一部分进行初始化),ipython的自动重新加载扩展可能很有用。请参阅http://ipython.readthedocs.org/en/stable/config/extensions/autoreload.html,包括页面底部的重要注意事项。
https://stackoverflow.com/questions/49737067
复制相似问题