如何修复PyDev“导入时未定义变量”错误?

141 投票
13 回答
122813 浏览
提问于 2025-04-15 18:19

我在Eclipse里用PyDev做一个Python项目,但PyDev总是给我的代码报错,很多都是错误的。我有一个叫settings的模块,里面定义了一个settings对象。我在另一个模块b里导入了这个对象,并用以下代码给它赋值:

from settings import settings
settings.main = object()

在我的一些代码中——但不是所有的代码,像这样的语句:

from settings import settings
print settings.main 

... 在Eclipse的错误提示窗口里会出现“从导入中未定义的变量:main”的消息,尽管代码运行得很好。请问我该怎么解决这些问题呢?

13 个回答

28

被标记为答案的帖子提供了一个变通方法,而不是解决方案。

这个方法对我有效:

  • 打开 窗口 - 首选项 - PyDev - 解释器 - Python 解释器
  • 切换到 强制内置 标签
  • 点击 新建...
  • 输入模块的名称(在我的例子中是 multiprocessing),然后点击 确定

这样不仅错误信息会消失,模块里的成员也会被识别。

50

我在使用opencv这个库,它需要一些二进制文件等等,所以我写的脚本中每隔一行就会出现这种烦人的错误。Python是一种动态语言,所以这种情况不应该被当作错误。

我通过以下步骤完全去掉了这些错误:

窗口 -> 偏好设置 -> PyDev -> 编辑器 -> 代码分析 -> 未定义 -> 从导入中未定义的变量 -> 忽略

就这样。

也可能是,

窗口 -> 偏好设置 -> PyDev -> 编辑器 -> 代码分析 -> 导入 -> 找不到导入 -> 忽略

158

在你的项目代码中,唯一的办法就是添加一个声明,告诉系统你是期待这个的——可以用一个 if False 来保护它,这样它就不会被执行(静态代码分析只看到你能看到的内容,而看不到运行时的信息。如果你自己打开了那个模块,你就不会知道 main 是被期待的)。

为了克服这个问题,有几个选择:

  1. 如果是某个外部模块,可以把它添加到 forced builtins 中,这样 PyDev 就会为它启动一个 shell 来获取运行时信息(详细信息可以查看 http://pydev.org/manual_101_interpreter.html)——也就是说,PyDev 会在一个 shell 中导入这个模块,然后对模块中的类使用 dir(module)dir 来提供代码补全和进行代码分析。

  2. 在有错误的行上,你可以使用 Ctrl+1(Mac 上是 Cmd+1),PyDev 会给你一个选项,让你添加一个注释来忽略这个错误。

  3. 你可以创建一个 stub 模块,并把它添加到 predefined 的补全中(关于这方面的详细信息也可以在 http://pydev.org/manual_101_interpreter.html 找到)。

撰写回答