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 pycheckere 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.)