140

我有一个在 Eclipse 中使用 PyDev 的 Python 项目,并且 PyDev 不断为我的代码生成错误错误。我有一个settings定义settings对象的模块。我在模块中导入它b并分配一个属性:

from settings import settings
settings.main = object()

在我的一些代码(但不是全部)中,语句如下:

from settings import settings
print settings.main 

...在 Eclipse 代码错误窗格中生成“Undefined variable from import: main”消息,即使代码运行没有问题。我该如何纠正这些?

4

13 回答 13

157

对于您项目中的代码,唯一的方法是添加一个声明,说明您期望 - 可能受 an 保护,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也有这方面的详细信息)。

于 2010-02-12T01:07:36.937 回答
50

我正在使用依赖二进制文件等的opencv,所以我有脚本,其中每一行都有这个愚蠢的错误。Python 是一种动态语言,因此不应将此类情况视为错误。

我通过以下方式完全删除了这些错误:

Window -> Preferences -> PyDev -> Editor -> Code Analysis -> Undefined -> Undefined Variable From Import -> Ignore

就是这样。

也可能是,Window -> Preferences -> PyDev -> Editor -> Code Analysis -> Imports -> Import not found -> Ignore

于 2011-10-31T13:01:27.563 回答
26

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

这个解决方案对我有用:

  • Window - Preferences - PyDev - Interpreters - Python Interpreter
  • 转到Forced builtins选项卡
  • 点击New...
  • 输入模块的名称(multiprocessing在我的例子中)并点击OK

不仅错误消息会消失,模块成员也会被识别。

于 2015-05-21T18:43:36.147 回答
10

我在 Eclipse/PyDev 项目中遇到了类似的问题。在这个项目中,python 代码的根目录是项目的子目录。

--> MyProject
 + --> src         Root of python code
   + --> module1     A module 
   + --> module2     Another module
 + --> docs
 + --> test

当项目被调试或运行时,一切都很好,因为工作目录被设置到了正确的位置。然而,PyDev 代码分析未能从模块 1 或模块 2 中找到任何导入。

解决方案是编辑项目属性 - > PyDev - PYTHONPATH 部分并从源文件夹选项卡中删除 /MyProject 并将 /MyProject/src 添加到它。

于 2011-12-16T13:05:48.283 回答
6

这对我有用:

步骤 1) 删除解释器,再次自动配置

步骤 2) Window - Preferences - PyDev - Interpreters - Python Interpreter 转到 Forced builtins 选项卡单击 New... 键入模块的名称(在我的情况下是诅咒),然后单击 OK

步骤 3) 在项目资源管理器中右键单击出现错误的模块。转到 PyDev-> 代码分析。

于 2016-08-19T15:45:09.333 回答
2

我有同样的问题。我在 Windows 上使用 Python 和 Eclipse。代码运行得很好,但是eclipse到处都显示错误。在我将文件夹 'Lib' 的名称更改为 'lib' (C:\Python27\lib) 后,问题就解决了。好像如果字母的大小写和配置文件中的不匹配,有时候会出问题(不过好像也不是,因为查错了好久才突然出现问题没有明显原因)。

于 2011-08-30T08:52:31.200 回答
1

我在做什么的近似值:

import module.submodule

class MyClass:
    constant = submodule.constant

皮林特对他说: E: 4,15: Undefined variable 'submodule' (undefined-variable)

我通过更改我的导入解决了这个问题:

from module.submodule import CONSTANT

class MyClass:
    constant = CONSTANT

注意:我还通过导入的变量重命名为具有大写名称以反映其常量性质。

于 2015-02-01T22:53:35.857 回答
0

在首选项 --> PyDev --> PyLint 下要传递给 PyLint 的参数中添加以下行:

--generated-members=objects

您需要为每个生成的 . 我通过谷歌搜索找到了这个,但我失去了参考。

于 2012-11-07T09:12:38.243 回答
0

在项目资源管理器中右键单击出现错误的任何模块。转到 PyDev-> 删除错误标记。

于 2013-01-14T03:30:00.027 回答
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->Preferences->PyDev->Interpreters->Python Interpreter 下,我选择了“Forced Builtins”选项卡并将“gtk.gdk”添加到列表中。

现在错误消息不再显示。

于 2014-07-23T16:47:02.990 回答
0

您可能只需要在 Eclipse 中重新配置您的 python 路径。请参阅我对类似问题的回答

于 2010-11-08T04:08:39.133 回答
0

我发现这两个步骤一直对我有用:

  1. 确认(或者添加)模块的父文件夹到 PYTHONPATH。
  2. 将模块的全名添加到强制内置。

这里要注意的事项:

  • 一些流行的模块安装有一些具有相同名称的父子对。在这些情况下,除了您已经为其他所有内容确认/添加的祖父文件夹之外,您还必须将该父文件夹添加到 PYTHONPATH。

  • 在添加到强制内置时使用(例如)“google.appengine.api.memcache”,而不仅仅是“memcache”,在此示例中,“google”是 PYTHONPATH 中定义的文件夹的直接子级。

于 2016-06-04T11:28:30.267 回答
0

如果您确定您的脚本运行并且它是一个误报,请转到 Preferences > PyDev > Editor > Code Analysis。将错误降级为警告。

在此处输入图像描述

http://www.pydev.org/manual_adv_code_analysis.html

于 2020-03-06T14:07:36.663 回答