Mi piacerebbe molto integrare Pylint nel processo di compilazione per i miei progetti Python, ma mi sono imbattuto in uno show-stopper: Uno dei tipi di errore che trovo estremamente utile--: E1101: *%s %r has no %r
member*
- Riporta costantemente errori quando si usano i campi django comuni , per esempio:
E1101:125:get_user_tags: Class 'Tag' has no 'objects' member
che è causato da questo codice:
def get_user_tags(username):
"""
Gets all the tags that username has used.
Returns a query set.
"""
return Tag.objects.filter( ## This line triggers the error.
tagownership__users__username__exact=username).distinct()
# Here is the Tag class, models.Model is provided by Django:
class Tag(models.Model):
"""
Model for user-defined strings that help categorize Events on
on a per-user basis.
"""
name = models.CharField(max_length=500, null=False, unique=True)
def __unicode__(self):
return self.name
Come posso sintonizzare Pylint per prendere correttamente in considerazione campi come gli oggetti? (Ho anche esaminato la fonte Django e non sono stato in grado di trovare l'implementazione di objects
, quindi sospetto che non sia "solo" un campo di classe. D'altra parte, sono abbastanza nuovo in Python, quindi ho potrebbe benissimo aver trascurato qualcosa).
Modifica: L'unico modo che ho trovato per dire a Pylint di non avvisare di questi avvisi è bloccando tutti gli errori del tipo (E1101) che non è una soluzione accettabile, dal momento che (a mio avviso) è un errore estremamente utile. Se esiste un altro modo, senza aumentare la fonte del pylint, per favore indicami le specifiche :)
Vedi qui per un riepilogo dei problemi che ho avuto con pychecker
e pyflakes
- hanno dimostrato di essere molto instabili per un uso generale. (Nel caso di pychecker, gli arresti anomali hanno avuto origine nel codice pychecker - non la fonte stava caricando / invocando.)