【问题标题】:Builtin function not working with Spyder内置函数不适用于 Spyder
【发布时间】:2023-11-30 10:31:01
【问题描述】:

我正在尝试在 Python 3,6 中使用 max 函数:

print('Maximum is:', max(1, 3, 2, 5, 4))

结果是

  File "E:/ProgramyRobione/untitled1.py", line 2, in <module>
    print('Maximum is:', max(1, 3, 2, 5, 4))

TypeError: 'int' object is not callable

我正在使用 Spyder,该行就是所有代码应该做的。

【问题讨论】:

  • 显然你在某处分配了max = ;不要那样做。
  • @dkato 实际上他们没有 - docs.python.org/3/library/functions.html#max。此外,描述您实际 在做什么 也很有帮助 - “传递数字列表或元组”,以便将语法与 OP 可以搜索的内容相关联。
  • 它是一个内置的,但你有一些不是 - 你能显示你的代码的第一行吗?
  • 它不必是一个异国情调的 Python 解释器。如果您在 Spyder 的 iPython 控制台中定义 max = some_int 然后尝试运行您的脚本,这实际上很容易重新创建,因为有一个全局命名空间。如果您使用的是支持此功能的 IDE,请尝试重新启动控制台(通常是 ctrl + .)
  • @dkato btw - 您可以删除自己的 cmets... 只需将鼠标悬停在它们上方,您将在其末尾获得 (x) - 单击它就消失了 - 无需编辑它说它已被删除:)

标签: python python-3.x function error-handling spyder


【解决方案1】:

这有点像 Spyder 附带的 iPython 头像。当我从 SO 复制/粘贴随机代码位以测试几天后才发现真正奇怪的行为时,我已经犯了这个错误——在 iPython 控制台中定义的变量也将无限期地位于脚本的全局命名空间中。

你可以做两件事:

  1. 内核硬重启 (ctrl + .)
  2. 跟进 this 功能请求线程,现在可以在每次运行脚本时自动清除命名空间。

【讨论】:

  • (这里是 Spyder 维护者) 自版本 3.1 以来,Spyder 已经实现了在执行前删除所有变量的功能。
  • @CarlosCordoba 我在 12 月 1 日之后在这台笔记本电脑上下载了(我不知道确切的日期,但肯定在那之后因为我一直在国外),默认情况下有命名空间干扰。我承认我的回答中的功能,但我绝对可以轻松地重新创建 OP 的问题。脚本 --> 控制台访问是 awesome 但我只有控制台 --> 脚本的麻烦。
  • @CarlosCordoba 我应该承认,我也认为 Spyder 很棒,它是我选择的 IDE,但默认情况下打开它在过去给我带来了一些真正的调试问题。也许是我,但我没想到它会默认污染我脚本的命名空间。
  • @roganjosh,三件事: 1. 如果默认关闭,清理命名空间是真的,但现在可以选择打开它; 2. 我们还提供了一个评估模型,可以在其专用控制台中运行每个文件。在该模型下,每次重新运行文件时都会清理命名空间,您可以在Run &gt; Configuration per filePreferences &gt; Run 中激活它以使其成为全局; 3. 将先前评估的结果留在控制台中并用它们污染您的命名空间可能不直观,但是来自Matlab的人非常习惯。
  • @CarlosCordoba。棒极了。我会尽快试用更新的版本。