2009-08-22 16 views
13

Estoy usando pylint + pydev, con python 2.6. tengo un módulo con sólo esta línea de códigopylint no reconoce parte de la biblioteca estándar

from email import Message 

Ahora, cuando trato de ejecutar este módulo funciona muy bien. Pero pylint informa de un error:

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

A pesar de que existe ... Cualquier idea de por qué?

+2

también se produce con 'lxml.etree'. – pfctdayelise

Respuesta

10

Me gusta la pildora, pero me parece que tengo que usar un montón de # pylint: disable-msg=E0611 y similares para que se cierre en casos que son perfectamente correctos pero la confunden (por ejemplo, como en este caso, debido a email ' s jugando con trucos de importación).

+0

Diría que aquí es culpa de' email', ya que no debería jugar con los ganchos de importación. –

1

El módulo email usa algún hacking de importación horrible, que me ha mordido en el pasado. Usted puede hacer esto:

>>> from email import Message 

pero no se puede hacer esto:

>>> import email 
>>> email.Message 
Traceback (most recent call last): 
    File "<stdin>", line 1, in ? 
AttributeError: 'module' object has no attribute 'Message' 

Soy consciente de que no es muy útil para hacer el trabajo pylint, pero podría ayudar a explicar el problema.

+1

¿Qué versión estás usando? 'email.Message' funciona para mí en Debian usando 2.5 y 2.6 – Tshepang

13

comprendemos que esta es una pregunta antigua, pero la respuesta correcta es que las formas antiguas de invocar lo que necesita, que usan el "hacking de importación" que describe Richie, han quedado obsoletas (a pesar de aparecer en muchos tutoriales). Si usa las nuevas formas, estará escribiendo mejor código y pylint no se quejará.

p. Ej.

from email import Message 
from email import Header 
from email.MIMEText import MIMEText 

debería ser

from email.message import Message 
from email.header import Header 
from email.mime.text import MIMEText 

etc.

+1

tru dat! ¿quien sabe? ¡Gracias! –

+0

¿Puede hacer referencia a un PEP o alguna fuente donde se lo recomendaron? – Lukas

+0

@Lukas - no es una cosa de PEP, es un paquete 'correo electrónico'; esta publicación tiene cinco años, así que no puedo recordar una discusión específica del estilo antiguo versus nuevo, pero verás el nuevo estilo que recomiendo aquí utilizado a lo largo de la documentación del paquete 'email' (ej. https: // docs.python.org/2.7/library/email-examples.html). – simon

Cuestiones relacionadas