【问题标题】:Python code works fine first time, but fails second timePython代码第一次运行良好,但第二次失败
【发布时间】:2015-12-01 06:40:01
【问题描述】:

我第一次从 Notebook 运行这段代码时效果很好:

#Which letters and how many
letters = ["a","b","c"]
noOfLetters = len(letters)

#Looking for all permutations
resultA = []
from itertools import permutations
for i in range(noOfLetters):
    resultA.append(list(permutations(letters,i+1)))

如果我再次运行它(不重新启动内核),我会收到以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-5-4050a4ce7a36> in <module>()
      7 from itertools import permutations
      8 for i in range(noOfLetters):
----> 9     resultA.append(list(permutations(letters,i+1)))

TypeError: 'list' object is not callable

【问题讨论】:

  • 在此代码之后的某个时刻,您执行list = &lt;something else&gt;。这会影响内置 list 并导致问题。将其重命名为 lst 或其他名称。尽量不要隐藏内置插件
  • 谢谢亚当,确实如此。
  • @GretelDePaepe 如果您必须使用与内置名称相同的名称,一种约定是在名称后附加下划线:例如,在这种情况下,list_ = . . .这不会覆盖内置的list

标签: python jupyter-notebook jupyter


【解决方案1】:

假设“笔记本”是 Jupyter(以前的 ipython 笔记本),您必须小心 jupyter 保持所有变量的状态。

--> 这意味着第二次运行从已经初始化为第一次运行结束时的值的变量开始。

避免这种情况的一种方法是重新启动内核;另一种是删除所有变量;还有一个是在每次运行时初始化所有变量。

来自docs

要重新启动内核(即计算引擎),请单击菜单 Kernel -> Restart。这对于从头开始计算非常有用(例如,变量被删除,打开的文件被关闭等等)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2013-03-01
    相关资源
    最近更新 更多