首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Python会抛出这个错误?

为什么Python会抛出这个错误?
EN

Stack Overflow用户
提问于 2018-04-09 15:59:36
回答 1查看 87关注 0票数 2

我定义了一个函数,如下所示:

代码语言:javascript
运行
复制
def test_create_dataframe(df):
    cols=set(df.columns)
    return cols

当我把这个函数放入木星笔记本并称之为它时,它会返回它应该做的事情,即:

代码语言:javascript
运行
复制
{'Name', 'accno', 'idno'}

但是,当我创建一个Python模块,导入它,并通过木星笔记本调用函数时,我会得到以下错误:

代码语言:javascript
运行
复制
      9 def test_create_dataframe(df):
     10         cols=set(df.columns)
---> 11         return cols
     12 
     13 

AttributeError: 'list' object has no attribute 'intersection'

谁能解释一下原因吗?

EN

Stack Overflow用户

回答已采纳

发布于 2018-04-09 21:28:10

您所看到的问题是由于底层的iPython实现。如果你:

  1. 将模块导入主脚本
  2. 运行主脚本
  3. 对导入到主脚本的模块进行更改
  4. 再次运行主脚本

然后你会得到一些非常奇怪的结果,如果你得到回溯。我不太清楚错误的行和显示的文本是如何编织在一起的(行号是正确的,但它为这些行号显示的代码与实际模块不匹配)。可以肯定的是,当您修改了导入的模块时,可以重新启动底层iPython内核,但这并不总是实用的。您可以找到关于这个这里的更多细节。

该职位的修正如下:

有几种方法可以解决这个问题。 1)最简单和最确定的方法是在更改导入模块后重新启动ipython内核。但这也有缺点,特别是丢失了ipython命名空间和任何其他导入模块中存在的数据。 2)对于简单的情况,可以使用python的重载函数。(这个函数是在Python 2中内置的,从Python3.4开始,它是从标准模块“importlib”导入的)。在许多情况下,这在编辑模块之后就足够了。在本文对堆栈溢出和在线其他地方的讨论中将对此进行更详细的描述。 3)对于更复杂的情况,在重新加载已编辑的模块时,还需要重新加载其依赖/导入的模块(例如,因为它们必须作为已编辑模块初始化的一部分进行初始化),ipython的自动重新加载扩展可能很有用。请参阅http://ipython.readthedocs.org/en/stable/config/extensions/autoreload.html,包括页面底部的重要注意事项。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49737067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档