Pylint не распознает часть стандартной библиотеки
Я использую pylint + pydev с python 2.6.
У меня есть модуль с этой строкой кода
from email import Message
Теперь, когда я пытаюсь запустить этот модуль, он работает нормально. Но pylint сообщает об ошибке:
ID: E0611 No name 'Message' in module 'email'
Хотя он существует...
Любая идея почему?
Ответы
Ответ 1
Мне нравится pylint, но я считаю, что мне нужно использовать много # pylint: disable-msg=E0611
и тому подобное, чтобы заставить его заткнуться в случаях, которые совершенно правильны, но запутайте его (например, как в этом случае, из-за email
игра с импортными трюками).
Ответ 2
осознайте, что это старый вопрос, но правильный ответ заключается в том, что более старые способы использования того, что вам нужно, которые используют "хакерство импорта", о котором говорит Ричи, давно устарели (несмотря на то, что все еще появляются во многих учебниках). Если вы используете новые способы, вы будете писать лучший код, а pylint
не будет жаловаться.
например.
from email import Message
from email import Header
from email.MIMEText import MIMEText
должен быть
from email.message import Message
from email.header import Header
from email.mime.text import MIMEText
и др.
Ответ 3
В модуле email
используется некоторый ужасный импортный хакер, который укусил меня в прошлом. Вы можете сделать это:
>>> from email import Message
но вы не можете этого сделать:
>>> import email
>>> email.Message
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: 'module' object has no attribute 'Message'
Я понимаю, что это не очень полезно для создания работы pylint, но это может помочь объяснить проблему.