如何修复PyDev"导入的未定义变量"错误?

Chr*_* B. 134 python code-analysis pydev

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

from settings import settings
settings.main = object()
Run Code Online (Sandbox Code Playgroud)

在我的一些代码中 - 但不是全部代码,如下所示:

from settings import settings
print settings.main 
Run Code Online (Sandbox Code Playgroud)

...在Eclipse代码错误窗格中生成"来自import:main的未定义变量"消息,即使代码运行没有问题.我怎样才能纠正这些?

Fab*_*zny 152

对于项目中的代码,唯一的方法是添加一个声明,说明你期望的 - 可能受到保护if False而不执行(静态代码分析只能看到你看到的内容,而不是运行时信息 - 如果你自己打开那个模块,你没有迹象表明主要是预期的).

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

  1. 如果它是一些外部模块,可以将其添加到forced builtinsPyDev中,以便它获取运行时信息(请参阅http://pydev.org/manual_101_interpreter.html了解详细信息) - 即:主要是PyDev将导入模块中的外壳,并做了dir(module),并dir在模块中发现的类呈现的完成,使代码分析.

  2. 您可以在有错误的行中使用Ctrl + 1(Cmd + 1 for Mac),PyDev将为您提供添加注释以忽略该错误的选项.

  3. 可以创建一个stub模块并将其添加到predefined完成(http://pydev.org/manual_101_interpreter.html也有详细说明).

  • 我试过Ctrl-1它给了我'@UndefinedVariable',它增加了一个anotation,并且有效.谢谢. (8认同)
  • 在进入极端之前,确保目录在PYTHONPATH中,然后退出/重新启动Eclipse,执行*Project> Pydev>删除错误标记*,numpy现在应该出现在Forced builtins中. (3认同)

ube*_*kel 48

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

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

窗口 - >首选项 - > PyDev - >编辑器 - >代码分析 - >未定义 - >导入时未定义的变量 - >忽略

就是这样.

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

  • 谢谢你.它简单易行.但是,我没有将"导入未找到"设置更改为"忽略",而是将其更改为"警告".现在没有显示出来.:)希望如果我有真正的导入问题,我会收到警告. (8认同)

ste*_*nci 18

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

这个解决方案对我有用:

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

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

  • @CoreDumpError我不在乎谁写了一篇文章.我尝试了帖子描述的内容,但它确实有效,但它是一种解决方法,而不是解决方案.我所描述的可能对其他计算机不起作用,但对我有用并且是正确的解决方案.如果另一个帖子链接到解决方案而不是描述它,那么它不遵循指南,我遵循指南描述什么是一个很好的解决方案,希望这将有助于其他人. (4认同)
  • @Isaac现在它确实如此,我在编辑之前发布了我的答案. (2认同)

Jul*_*les 9

我在Eclipse/PyDev项目中遇到了类似的问题.在这个项目中的Python代码的根目录是该项目的一个子目录.

--> MyProject
 + --> src         Root of python code
   + --> module1     A module 
   + --> module2     Another module
 + --> docs
 + --> test
Run Code Online (Sandbox Code Playgroud)

当项目被调试或运行时,一切都很好,因为工作目录设置在正确的位置.但是,PyDev代码分析无法从module1或module2中找到任何导入.

解决方法是编辑的项目属性 - >的PyDev - PYTHONPATH部分,然后从源文件夹选项卡中删除/ MyProject的,并添加/ MyProject的/ src目录,以它来代替.


小智 6

这为我工作:

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

步骤2)窗口-首选项-PyDev-解释器-Python解释器转到“强制内置”选项卡。单击“新建...”。输入模块名称(在我的情况下为curses),然后单击“确定”。

步骤3)右键单击项目浏览器中给出错误的模块。转到PyDev->代码分析。