Comment puis-je dire à PyLint “c’est une variable, pas une constante” pour arrêter le message C0103?

J’ai dans mon programme Python 2.6 une variable de niveau module nommée “_log”, dont PyLint se plaint:

C0103: Invalid name "_log" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) 

Ayant lu cette réponse, je comprends pourquoi elle fait ceci: elle pense que la variable est une constante et applique le regex constant. Cependant, je ne suis pas d’accord: je pense que c’est une variable. Comment puis-je le dire à PyLint, alors il ne se plaint pas? Comment PyLint détermine-t-il s’il s’agit d’une variable ou d’une constante? Traite-t-il simplement toutes les variables de niveau module comme des constantes?

 # pylint: disable-msg=C0103 

Placez-le dans la scope où vous souhaitez que ces avertissements soient ignorés. Vous pouvez également faire un commentaire de fin de ligne ci-dessus pour désactiver le message uniquement pour cette ligne de code.

IIRC il est vrai que pylint interprète toutes les variables de niveau module comme étant des «constantes».

les nouvelles versions de pylint prendront cette ligne à la place

 # pylint: disable=C0103 

Vous pouvez également spécifier une liste séparée par des virgules de “bons noms” qui sont toujours autorisés dans votre pylintrc, par exemple:

 [BASIC] good-names=_log 

Il me semble qu’un peu de refactor pourrait aider. Pylint a considéré cela comme un module, il serait donc raisonnable de ne pas s’attendre à voir des variables à ce niveau. Inversement, il ne se plaint pas des vars dans les classes ou les fonctions. Le paradigme suivant semble assez courant et résout le problème:

 def main(): '''Entry point if called as an executable''' _log = MyLog() # . . . if __name__ == '__main__': main() 

Cela a l’avantage que si vous avez des classes utiles, je peux les importer sans exécuter votre main. Le __name__ est celui du module donc le “if” échoue.

Dans les nouvelles versions de pylint, cette ligne est maintenant

 # pylint: disable=C0103 

le message d’activation est aussi simple

 # pylint: enable=C0103 

Comme d’autres réponses l’ont indiqué, vous pouvez désactiver un avertissement PyLint spécifique (tel que C0103) en incluant la ligne suivante:

 # pylint: disable=C0103 

mais cela génère l’avertissement de Locally disabling invalid-name . Notez que cet avertissement secondaire peut être utile si vous souhaitez être averti de l’avertissement désactivé. Si vous souhaitez désactiver l’avertissement en silence sans modifier votre fichier de configuration (ce qui désactiverait l’avertissement globalement), vous pouvez utiliser:

 # pylint: disable=I0011,C0103 

Notez que PyLint ne vous avertit pas que vous désactivez I0011!

Si vous désactivez un message localement dans votre fichier, Pylint signalera un autre avertissement différent!

 Locally disabling invalid-name (C0103) [I:locally-disabled] 

Si votre intention est de créer un filtre à charpie propre et que cela devrait sûrement être la cible, sinon pourquoi vous dérangez-vous, vous pouvez désactiver ce message et le message correspondant activé localement dans votre fichier de configuration:

 disable=locally-disabled, locally-enabled