2009-08-22 12 views
13

Sto usando pylint + pydev, con python 2.6. Ho un modulo con solo questa riga di codicepylint non riconosce alcune delle librerie standard

from email import Message 

Ora, quando provo a fare funzionare questo modulo funziona benissimo. Ma pylint riporta un errore:

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

Anche se esiste ... Qualsiasi idea del perché?

+2

si verifica anche con 'lxml.etree'. – pfctdayelise

risposta

10

Mi piace il puntatore, ma trovo che devo usare molto # pylint: disable-msg=E0611 e simili per farlo chiudere nei casi perfettamente corretti ma confonderlo (ad esempio, come in questo caso, a causa di email " s giocando con trucchi di importazione).

+0

Direi che è colpa di' email', perché non dovrebbe giocare con i ganci di importazione. –

1

Il modulo email utilizza un pasticcio di importazione orribile, che mi ha morso in passato. Si può fare questo:

>>> from email import Message 

, ma non si può fare questo:

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

mi rendo conto che non è molto utile per rendere il lavoro pylint, ma potrebbe aiutare a spiegare il problema.

+1

quale versione stai usando? 'email.Message' funziona per me su Debian usando 2.5 e 2.6 – Tshepang

13

rendersi conto che questa è una vecchia domanda, ma la risposta corretta è che i metodi più vecchi di invocare quello che ti serve, che usano "l'hackery di importazione" che Richie descrive, sono stati a lungo deprecati (nonostante siano ancora presenti in molti tutorial). Se usi i nuovi modi, starai scrivendo codice migliore e pylint non si lamenterà.

ad es.

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

dovrebbe essere

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

ecc

+1

tru dat! chi lo sapeva? Grazie! –

+0

Puoi fare riferimento a un PEP o ad una fonte in cui è stato consigliato? – Lukas

+0

@Lukas: non è una cosa PEP, è una cosa del pacchetto 'email'; questo post ha cinque anni, quindi non ricordo una discussione specifica sul vecchio stile rispetto al nuovo stile, ma vedrai il nuovo stile che raccomando qui usato nella documentazione del pacchetto 'email' (es. https: // docs.python.org/2.7/library/email-examples.html). – simon

Problemi correlati