在我写的程序中,我创建了一个名为settings
的模块,该模块声明了一些常量,但是从配置文件中加载了其他内容,将它们放在模块命名空间中(例如:π的值可能在模块的代码,但是配置文件中用户的权重。)
在其他模块中,我可以这样做:
from settings import *
一切都适合我,但是 - 使用Aptana Studio / PyDev,代码分析工具会抛出很多undefined variable errors
,如下所示:
我发现here在类docstrings中有一个可用于防止此行为的标志,但如果我尝试在模块级别使用它,它就没有效果。所以我想知道两件事:
有没有办法有选择地摆脱这些错误(这意味着我不想完全关闭选项“标记为未定义变量的错误”:在其他模块中它实际上可能是一个错误)?
如果没有,是否有另一种模式可以实现我想要的野生导入,但不会混淆代码分析工具?
优先注意事项:我完全清楚不鼓励野生进口。
答案 0 :(得分:2)
实际上你可能会有同样的错误,即使它不是一个疯狂的导入(即:import settings / settings.MY_VARIABLE仍会显示错误,因为代码分析无法找到它)。
除了引用它的每个地方的@UndefinedVariable
( CTRL + 1 将显示该选项),我认为模块的更好模式将是:
MY_VARIABLE = 'default value'
...
update_default_values() # Go on and override the defaults.
这样,代码分析(以及任何阅读模块的人)都会知道预期的变量。
否则,如果您以前不了解它们,我认为更好的方法是使用方法(即:get_settings('MY_VARIABLE')
)。
与实际问题无关。我真的建议不要在这里使用狂野导入(甚至不导入常量......即:from settings import MY_VARIABLE
)。
设置模块的更好方法始终使用:
import settings
settings.MY_VARIABLE
(因为否则,如果任何地方决定要更改MY_VARIABLE,那么将引用放在其自己的命名空间中的任何地方都可能永远不会获得更改的变量。)
更安全的方法是使用方法get_setting('var')
,因为它可以让你更好地延迟加载你的首选项(即:不在导入时加载,但是当它被称为第一次时)
答案 1 :(得分:0)
您可以对错误使用Ctrl-1,并选择@UndefinedVariable
或在您要忽略的错误行上输入#@UndefinedVariable
。
您可以尝试通过转到Window>添加要由PyDev解释器扫描的模块。首选项,然后是PyDev>口译员 - Python。在“库”选项卡下,单击New Folder
并浏览到包含settings
的目录,然后单击Apply
。希望Pydev能找到你的包并识别疯狂导入的变量。