Python 派林;未定义变量";用C+编写的模块内+/小口喝
我使用SIP将几个本地C++类导出到Python。我不直接使用生成的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
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)。另外,它似乎没有任何选项来告诉它存在的(非全局范围)类,但它无法知道。这似乎是一个明显的疏忽,我对此感到困惑。