LXML 라이브러리를 사용하여 XML을 구문 분석하는 일부 코드에서 mypy
을 사용하여 형식 검사를 수행하려고합니다.mypy 가짜 오류 : "모듈"에 etree가있는 "XPath"속성이 없습니다
etree.XPath
을 사용하는 각 줄마다 mypy
에서 의사 오류가 발생합니다. 예를 들어, 사소한 스크립트
from lxml import etree
NameXPath = etree.XPath("Name/text()")
다음은 오류
test.py:3: error: "module" has no attribute "XPath"
에게 발생하지만 스크립트는 잘 실행하고 내 XPath
의 작업이 제대로 실행시.
나는 또한 #type:ignore
을 가져 왔는데, 나는 mypy
이 그 라이브러리를 타입 체크하지 않는다고 말할 수 있다고 생각했지만, 에러를 억제하지는 못했다.
from lxml import etree # type:ignore
NameXPath = etree.XPath("Name/text()")
나는 어떤 유형 약어가없는 별도의 함수로 etree.XPath
에 대한 호출을 이동하여 몇 가지 오류를 억제에서 일부 성공을했다,하지만 그건 해킹 같은 듯 내 코드를 준비하라고 강요 어색한 방식으로.
이 허위 오류를 완전히 없애거나, etree.XPath
기능이 존재한다는 힌트를 얻고 싶습니다. 독자적으로 알아낼 수없는 것처럼 보입니다.
분명히 말하자면, mypy
은 lxml
라이브러리에서 나오는 구조에 대해 올바른 유형을 알고 있다는 사실을 실제로 신경 쓰지 않습니다. 필자는 자신의 클래스에 타입 정보를 넣는 것에 대해 더 신경을 썼다. 구문 분석 된 정보를 밀어 넣기 때문에 형식 확인 함수가 필요하다. etree.XPath
을 사용하여 쿼리를 수행하고 데이터를 찾은 다음 유형을 입력한다. 내 스크립트 내에서 정의 된 주석 처리 된 클래스.
mypy
내가 현재이가 인 것 같습니다 mypy
0.4.4
감사합니다. "import XPath # type : ignore"사용에 대한 첫 번째 제안이 효과가있었습니다. 나는 "import etree"#type : ignore를 사용하면 etree 내의 어떤 것도 타입을 무시하게 만들 것이라고 잘못 추측 했었지만 그렇지 않습니다. 두 번째 제안에 필요한 유형 주석을 작성하거나 typeshed에 대한 패치를 제안하는 데는 충분하지 않지만 [버그] (https://github.com/python/typeshed/issues/525)를 제출했습니다. 그곳에 – uglycoyote