Пилинт не признает некоторые из стандартной библиотеки - PullRequest
15 голосов
/ 22 августа 2009

Я использую Pylint + Pydev, с Python 2.6. У меня есть модуль только с этой строкой кода

from email import Message

Теперь, когда я пытаюсь запустить этот модуль, он работает нормально. Но Pylint сообщает об ошибке:

ID: E0611 No name 'Message' in module 'email'

Хотя оно существует ... Есть идеи почему?

Ответы [ 3 ]

15 голосов
/ 07 июня 2011

понимаю, что это старый вопрос, но правильный ответ заключается в том, что старые способы вызова того, что вам нужно, использующие «хакерство импорта», которое описывает Ричи, уже давно устарели (несмотря на то, что они по-прежнему появляются во многих руководствах). Если вы используете новые способы, вы будете писать лучший код, и 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

и т.д.

11 голосов
/ 22 августа 2009

Мне нравится Pylint, но я нахожу, что мне приходится много использовать # pylint: disable-msg=E0611 и тому подобное, чтобы заставить его замолчать в случаях, которые совершенно правильны, но путают его (например, как в этом случае, из-за email играет с импортными хитростями).

1 голос
/ 22 августа 2009

Модуль 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, но это может помочь объяснить проблему.

...