Ich würde sehr gerne pylint in den Erstellungsprozess für meine Python-Projekte integrieren, aber ich bin auf einen Show-Stopper gestoßen: Einer der Fehlertypen, die ich äußerst nützlich finde:E1101: *%s %r has no %r
member*
- - meldet ständig Fehler, wenn allgemeine Django-Felder verwendet werden , zum Beispiel:
E1101:125:get_user_tags: Class 'Tag' has no 'objects' member
was durch diesen Code verursacht wird:
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
Wie kann ich Pylint so einstellen, dass Felder wie Objekte richtig berücksichtigt werden? (Ich habe mir auch die Django-Quelle angesehen und konnte die Implementierung von nicht finden objects
. Daher vermute ich, dass es sich nicht "nur" um ein Klassenfeld handelt. Andererseits bin ich ziemlich neu in Python, also ich kann sehr gut etwas übersehen haben.)
Bearbeiten: Die einzige Möglichkeit, Pylint anzuweisen, nicht vor diesen Warnungen zu warnen, besteht darin, alle Fehler des Typs (E1101) zu blockieren, was keine akzeptable Lösung darstellt, da dies (meiner Meinung nach) ein äußerst nützlicher Fehler ist. Wenn es einen anderen Weg gibt, ohne die Pylint-Quelle zu erweitern, weisen Sie mich bitte auf Einzelheiten hin :)
Sehen Sie hier eine Übersicht über die Probleme , die ich habe mit pychecker
und pyflakes
- sie weit zu instabil für den allgemeinen Gebrauch erwiesen haben. (Im Fall von Pychecker stammten die Abstürze aus dem Pychecker-Code - nicht aus der Quelle, die geladen / aufgerufen wurde.)