2014-05-19 5 views
1

SIP를 사용하여 여러 원시 C++ 클래스를 파이썬으로 내보내겠습니다.pylint C++/SIP로 작성된 모듈의 "정의되지 않은 변수"

# 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이 maplib_sip에서 LatLon이 올 것을 인식하지 않습니다 :

error pymaplib parse_coordinate 40 15 Undefined variable 'LatLon' 

불행하게도, 같은 내가 직접 결과 maplib_sip.pyd 모듈을 사용하지만, 오히려 파이썬 패키지 pymaplib에 포장하지 않는다 maplib_sip의 모든 클래스뿐만 아니라 내가 사용하는 wxPython (Phoenix)의 코드 대부분에서 발생합니다. 이것은 효과적으로 거짓 오류의 양이 실제 문제를 왜곡 시키므로 Pylint를 쓸모 없게 만듭니다.

additional-builtins 내 문제에 대한이 잘 작동하지 않습니다

# 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_sip.LatLon이 실제로 존재한다고 필립이 어떻게 든 말할 수 있습니까? 심지어 더 나은, 어떻게 든 내포 (IPython에서 작동)를 통해 그 자체를 알아낼 수 있습니까?

필자는 정의되지 않은 변수 검사를 비활성화 할 필요가 없다. 필자가 필 린트의 큰 장점 중 하나이기 때문이다.

프로그램 버전 : Pylint 1.2.1, astroid 1.1.1, common 0.61.0, 난 당신이 import * 사용을 중지 옆에 있다면, 당신의 경우에 작동 잘 모르겠어요하지만 Python 3.3.3 [32 bit] on Windows7

답변

0

당신이 (새로운 --ignored-modules 옵션을 시도 할 수있는 아마 pylint가 이미 당신에게 말한 것처럼 좋은 생각 일 것입니다;).

짧은 가져 오기 이름 (예 : import maplib_sip as mls)을 사용하고 접두사 이름 (예 : mls.LatLon)을 사용하십시오.

원래 문제는 필림 추적기 (https://bitbucket.org/logilab/pylint/issues)에서 문제가 될 수 있습니다.하지만 sip에서 내 보낸 모듈의 구성원을 얻지 못하는 이유를 파악하기 위해 조사가 수행됩니다.

+0

pylint는 C++ 확장 모듈을 처리하지 못하는 것 같습니다 (AST를 얻을 수 없음). 게다가, 존재하지 않는 (non-global-scope) 클래스에 대해 말할 수있는 옵션이없는 것 같지만 알 수는 없습니다. 이것은 내가 뻔뻔스러워하는 그런 뻔뻔스러운 생략처럼 보인다. –