Seite 1 von 1
Pylint mag keine Variablen auf Modulebene?
Verfasst: Montag 27. Dezember 2010, 20:44
von syntor
Moin
Ich habe soeben mal Pylint über eine Datei laufen lassen, und das ist z.B. das hier 'rausgekommen:
Code: Alles auswählen
Invalid name, (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
Ich schliesse daraus, das der Autor von Pylint nur Konstanten auf Modulebene wünscht und keine Variablen. Nun frage ich mich: weshalb? Soweit ich weiss, hat Pylint kein Absolutheits- bzw Gültigkeitsanspruch - es repräsentiert also möglicherweise bloss die persönliche Präferenz des Autors.
Was denkt ihr darüber?
Re: Pylint mag keine Variablen auf Modulebene?
Verfasst: Montag 27. Dezember 2010, 21:04
von cofi
Die Konsequenz von variablen Namen ist, dass sie nur per `global` oder eben durch Code auf Modulebene. Für ersteres gibt es gute Gruende das zu vermeiden, letzteres sollte bei Bibliotheken nicht vorkommen.
Die Regel macht damit fuer mich Sinn. Natuerlich hat pylint keinen Anspruch, es ist nur ein Tool, das dem Benutzer helfen soll, deshalb kann man einzelne Checker ja auch abschalten, wenn sie einem nicht gefallen

Re: Pylint mag keine Variablen auf Modulebene?
Verfasst: Montag 27. Dezember 2010, 21:16
von syntor
Deinen ersten Satz verstehe ich nicht.
Nun, vielleicht hatte ich das etwas schlecht formuliert: Ich nutze keine Variablen auf Modulebene in diesem Sinne. Ich stelle bloss gewisse Funktionen/Klassen/Module als "Attribute" des Pakets bereit, also "just for convenience" und um die Benutzung intuitiver zu gestalten. (Schrecklicher Satz, ich hoffe man versteht ihn) Ich benutze also keine globalen Variablen.
Re: Pylint mag keine Variablen auf Modulebene?
Verfasst: Montag 27. Dezember 2010, 21:36
von cofi
syntor hat geschrieben:Deinen ersten Satz verstehe ich nicht.
Kein Wunder, da hat jemand ein "veraendert werden koennen" am Ende des Satzes geklaut
Ok jetzt verstehe ich dein Problem. `pylint` ist eben ein "dummes" Tool, weil es nicht zurueckverfolgt, dass es sich hier nur um Shortcuts handelt. Andererseits hat man bei Python im Allgemeinen schlechte Karten wenn man das versucht ohne den Code auszufuehren.
Mit anderen Worten: `pytlint` hat hier nur die Konventionen an der Hand und erzeugt hier eben false positives. Schade, dass man die Checker nicht auf Datei-Basis ausschalten kann (zumindest hab ich auf die schnelle nichts gefunden).
Re: Pylint mag keine Variablen auf Modulebene?
Verfasst: Montag 27. Dezember 2010, 21:42
von BlackJack
@syntor: Kannst Du mal ein konkretes Beispiel geben?
Es sollten dort halt keine *Variablen* stehen, sondern nur Konstanten. Wo die `pylint`-Meldung "unberechtigt" kommt, sind halt Konstanten die nicht den Namenskonventionen für Konstanten folgen, auch wenn das aus gutem Grund geschieht. Zum Beispiel dynamisch erstellte Funktionen wo `pylint` nicht erkennt, dass man da eine Funktion ohne ``def`` definiert hat, zum Beispiel wenn man eine Funktion mittels `partial()` auf Modulebene erstellt. Oder Typen/Klassen die nicht mit ``class``, sondern zum Beispiel mit `collections.namedtuple()` erzeugt wurden. Da kann man mit einem entsprechenden Kommentar `pylint` in diesen Einzelfällen gezielt das Meckern abgewöhnen.
@cofi: Du kannst einzelne Checks sogar auf "Block" oder Zeilenbasis ausschalten.
Re: Pylint mag keine Variablen auf Modulebene?
Verfasst: Montag 27. Dezember 2010, 22:01
von syntor
@BlackJack: ziemlich genau das, was du als Beispiel gegeben hast und vergleichbare Dinge.
Danke für die Antworten!
Wie würde ich denn bestimmte Checks auf einer gewissen Ebene abschalten?
Re: Pylint mag keine Variablen auf Modulebene?
Verfasst: Dienstag 28. Dezember 2010, 00:23
von Jerry