如何修复PyDev“导入时未定义变量”错误?
我在Eclipse里用PyDev做一个Python项目,但PyDev总是给我的代码报错,很多都是错误的。我有一个叫settings
的模块,里面定义了一个settings
对象。我在另一个模块b
里导入了这个对象,并用以下代码给它赋值:
from settings import settings
settings.main = object()
在我的一些代码中——但不是所有的代码,像这样的语句:
from settings import settings
print settings.main
... 在Eclipse的错误提示窗口里会出现“从导入中未定义的变量:main”的消息,尽管代码运行得很好。请问我该怎么解决这些问题呢?
13 个回答
被标记为答案的帖子提供了一个变通方法,而不是解决方案。
这个方法对我有效:
- 打开
窗口 - 首选项 - PyDev - 解释器 - Python 解释器
- 切换到
强制内置
标签 - 点击
新建...
- 输入模块的名称(在我的例子中是
multiprocessing
),然后点击确定
这样不仅错误信息会消失,模块里的成员也会被识别。
我在使用opencv这个库,它需要一些二进制文件等等,所以我写的脚本中每隔一行就会出现这种烦人的错误。Python是一种动态语言,所以这种情况不应该被当作错误。
我通过以下步骤完全去掉了这些错误:
窗口 -> 偏好设置 -> PyDev -> 编辑器 -> 代码分析 -> 未定义 -> 从导入中未定义的变量 -> 忽略
就这样。
也可能是,
窗口 -> 偏好设置 -> PyDev -> 编辑器 -> 代码分析 -> 导入 -> 找不到导入 -> 忽略
在你的项目代码中,唯一的办法就是添加一个声明,告诉系统你是期待这个的——可以用一个 if False
来保护它,这样它就不会被执行(静态代码分析只看到你能看到的内容,而看不到运行时的信息。如果你自己打开了那个模块,你就不会知道 main 是被期待的)。
为了克服这个问题,有几个选择:
如果是某个外部模块,可以把它添加到
forced builtins
中,这样 PyDev 就会为它启动一个 shell 来获取运行时信息(详细信息可以查看 http://pydev.org/manual_101_interpreter.html)——也就是说,PyDev 会在一个 shell 中导入这个模块,然后对模块中的类使用dir(module)
和dir
来提供代码补全和进行代码分析。在有错误的行上,你可以使用 Ctrl+1(Mac 上是 Cmd+1),PyDev 会给你一个选项,让你添加一个注释来忽略这个错误。
你可以创建一个
stub
模块,并把它添加到predefined
的补全中(关于这方面的详细信息也可以在 http://pydev.org/manual_101_interpreter.html 找到)。