Я пытаюсь использовать mypy
для проверки типов в некотором коде, который использует библиотеку LXML для синтаксического анализа XML.mypy spurious error: «module» не имеет атрибута «XPath» с etree
В каждой строке, где я использую 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
для выполнения запросов, поиска данных, а затем вставляют их в тип -annotated классы, которые определены в моем скрипте.
mypy
не кажется сложности с другими функциями в etree
, например, это нормально с моим призывам etree.parse
настоящее время я использую mypy
0.4.4
Спасибо. ваше первое предложение использовать «import XPath # type: ignore» работало. Я предположил неправильно, что использование «import etree» #type: ignore заставит его игнорировать типы для чего-либо в пределах etree, но это не так. Я не знаю достаточно, чтобы написать аннотации типа, необходимые для вашего второго предложения, или предложить патч для типов, но я отправил [bug] (https://github.com/python/typeshed/issues/525) на там – uglycoyote