我在Eclipse中使用PyDev创建了一个Python项目,并且PyDev不断为我的代码生成错误错误。我有一个模块settings
,它定义了一个settings
对象。我在模块b
中导入它并分配一个属性:
from settings import settings
settings.main = object()
在我的一些代码中 - 但不是全部代码,如:
from settings import settings
print settings.main
...在Eclipse代码错误窗格中生成“来自import:main的未定义变量”消息,即使代码运行没有问题。我该如何纠正这些?
答案 0 :(得分:151)
对于项目中的代码,唯一的方法是添加一个声明,表示您期望 - 可能受if False
保护,以便它不会执行(静态代码分析只能看到您看到的内容) ,而不是运行时信息 - 如果您自己打开该模块,则没有迹象表明主要是预期的。)
要克服这个问题,有一些选择:
如果它是某个外部模块,则可以将其添加到forced builtins
,以便PyDev为它生成一个shell以获取运行时信息(有关详细信息,请参阅http://pydev.org/manual_101_interpreter.html) - 即:大多数情况下,PyDev会在shell中导入模块,并对模块中的类进行dir(module)
和dir
以显示完成并进行代码分析。
您可以在有错误的行中使用Ctrl + 1(Cmd + 1代表Mac),PyDev会为您提供添加注释以忽略该错误的选项。
可以创建一个stub
模块并将其添加到predefined
完成(http://pydev.org/manual_101_interpreter.html也有详细信息)。
答案 1 :(得分:47)
我正在使用opencv,它依赖于二进制文件等,所以我有脚本,其他所有行都有这个愚蠢的错误。 Python是一种动态语言,所以这种场合不应被视为错误。
我完全删除了这些错误:
窗口 - >偏好 - > PyDev - >编辑 - >代码分析 - >未定义 - >来自导入的未定义变量 - >忽略
就是这样。
它也可能是, 窗口 - >偏好 - > PyDev - >编辑 - >代码分析 - >进口 - >未找到导入 - >忽略
答案 2 :(得分:16)
标记为答案的帖子提供了一种解决方法,而非解决方案。
此解决方案适用于我:
Window - Preferences - PyDev - Interpreters - Python Interpreter
Forced builtins
标签New...
multiprocessing
),然后点击OK
错误消息不仅会消失,模块成员也会被识别。
答案 3 :(得分:9)
我在Eclipse / PyDev项目中遇到了类似的问题。在这个项目中,python代码的根目录是项目的子目录。
--> MyProject
+ --> src Root of python code
+ --> module1 A module
+ --> module2 Another module
+ --> docs
+ --> test
当项目被调试或运行时,一切都很好,因为工作目录设置在正确的位置。但是,PyDev代码分析无法从module1或module2中找到任何导入。
解决方案是编辑项目属性 - > PyDev - PYTHONPATH部分并从源文件夹选项卡中删除/ MyProject,并将/ MyProject / src添加到它。
答案 4 :(得分:6)
这对我有用:
步骤1)删除解释器,再次自动配置
步骤2)窗口 - 首选项 - PyDev - 解释器 - Python解释器 转到强制内置选项卡 点击新... 键入模块的名称(在我的情况下为curses),然后单击“确定”
步骤3)在项目资源管理器中右键单击任何给出错误的模块。转到PyDev->代码分析。
答案 5 :(得分:1)
我遇到了同样的问题。我在Windows上使用Python和Eclipse。代码运行得很好,但eclipse在各处显示错误。在我将文件夹'Lib'的名称更改为'lib'(C:\ Python27 \ lib)之后,问题就解决了。似乎如果字母的大写与配置文件中的大写不匹配,这有时会引起问题(但似乎并非总是如此,因为错误检查很长时间才能突然出现问题,因为没有明显的问题原因)。
答案 6 :(得分:1)
我正在做的事情的近似值:
import module.submodule
class MyClass:
constant = submodule.constant
哪个pylint说:
E: 4,15: Undefined variable 'submodule' (undefined-variable)
from module.submodule import CONSTANT
class MyClass:
constant = CONSTANT
注意:我还通过导入变量重命名,使其具有大写名称以反映其常量性质。
答案 7 :(得分:0)
您可能只需要在Eclipse中重新配置python路径。请参阅我的answer以查找类似问题。
答案 8 :(得分:0)
- > PyDev - >传递给PyLint的参数下的PyLint 添加以下行:
--generated-members=objects
您需要为每个生成的内容执行此操作。我通过谷歌搜索找到了这个,但我丢失了参考。
答案 9 :(得分:0)
在项目资源管理器中右键单击任何给出错误的模块。转到PyDev->删除错误标记。
答案 10 :(得分:0)
我的回答并没有做出任何新的贡献,只是我遇到的一个具体例子。
import gtk.gdk
w = gtk.gdk.get_default_root_window()
PyDev显示错误消息"导入的未定义变量:get_default_root_window()"
在python shell中你可以看到这是一个内置的'上面的答案中提到的模块:
>>> import gtk.gdk
>>> gtk.gdk
<module 'gtk.gdk' (built-in)>
现在在Window-&gt; Preferences-&gt; PyDev-&gt; Interpreters-&gt; Python Interpreter下,我选择了标签&#39; Forced Builtins&#39;并添加了&gt; gtk.gdk&#39;列表。
现在错误信息已经显示了。
答案 11 :(得分:0)
我发现这两个步骤一直对我有用:
这里需要注意的事项:
某些常用模块会安装一些具有相同名称的父对子对。在这些情况下,您还必须将该父级添加到PYTHONPATH,以及祖父级文件夹,您已经确认/添加了其他所有内容。
使用(例如)&#34; google.appengine.api.memcache&#34;当添加到强制内置时,NOT&#34; memcache&#34;只有,在哪里&#34; google&#34;在此示例中,是PYTHONPATH中定义的文件夹的直接子项。
答案 12 :(得分:0)
如果您确定脚本已运行并且是错误警报,请转至“首选项”>“ PyDev”>“编辑器”>“代码分析”。将错误降级为警告。