Python 派林;未定义变量";用C+编写的模块内+/小口喝

Python 派林;未定义变量";用C+编写的模块内+/小口喝,python,pylint,Python,Pylint,我使用SIP将几个本地C++类导出到Python。我不直接使用生成的maplib_sip.pyd模块,而是将其包装在Python包pymaplib中: # pymaplib/__init__.py # Make all of maplib_sip available in pymaplib. from maplib_sip import * ... def parse_coordinate(coord_str): ... # LatLon is a class imported

我使用SIP将几个本地C++类导出到Python。我不直接使用生成的
maplib_sip.pyd
模块,而是将其包装在Python包
pymaplib
中:

# pymaplib/__init__.py
# Make all of maplib_sip available in pymaplib.
from maplib_sip import *
...

def parse_coordinate(coord_str):
    ...
    # LatLon is a class imported from maplib_sip.
    return LatLon(lat_float, lon_float)
Pylint不知道
LatLon
来自
maplib\u sip

error  pymaplib  parse_coordinate  40  15  Undefined variable 'LatLon'
不幸的是,对于
maplib_sip
中的所有类,以及我使用的wxPython(Phoenix)中的大多数代码,都会发生同样的情况。这实际上使Pylint对我来说毫无价值,因为虚假错误的数量使真正的问题相形见绌

附加内置功能对我的问题不起作用:

# Both of these don't remove the error:
additional-builtins=maplib_sip.LatLon
additional-builtins=pymaplib.LatLon

# This does remove the error in pymaplib:
additional-builtins=LatLon

# But users of pymaplib still give an error:
#   Module 'pymaplib' has no 'LatLon' member
我该怎么处理?我能告诉派林实际上存在
maplib\u sip.LatLon
吗?更妙的是,它能通过内省(例如,在IPython中有效)自己找出答案吗

我不想禁用未定义的变量检查,因为这是pylint给我带来的巨大好处之一

程序版本: Pylint 1.2.1
星体1.1.1,普通0.61.0

Python3.3.3[32位]在Windows7上

您可能想尝试新的
--忽略模块
选项,尽管我不确定它是否适用于您的情况,如果您停止使用
import*
(这可能是一个好主意,正如派林可能已经告诉您的那样;)

而是使用简短的导入名称,例如
import maplib_sip as mls
,然后在需要时使用前缀名称,例如
mls.LatLon


注意,原来的问题在PyLink TrActer()上是值得的,所以我们将进行一些调查,了解为什么它没有得到SIP导出模块的成员。

看起来PyLink不处理C++扩展模块(不能为它获得AST)。另外,它似乎没有任何选项来告诉它存在的(非全局范围)类,但它无法知道。这似乎是一个明显的疏忽,我对此感到困惑。