web-dev-qa-db-fra.com

Comment dire à PyLint "c'est une variable, pas une constante" pour arrêter le message C0103?

J'ai une variable de niveau module dans mon programme Python 2.6 nommé "_log", dont PyLint se plaint:

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

Après avoir lu cette réponse je comprends pourquoi il fait cela: il pense que la variable est une constante et applique l'expression régulière. Cependant, je vous prie de différer: je pense que c'est une variable. Comment puis-je le dire à PyLint pour qu'il ne se plaigne 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?

64
EMP
# pylint: disable-msg=C0103

Mettez-le dans la portée où vous souhaitez que ces avertissements soient ignorés. Vous pouvez également faire de ce qui précède un commentaire de fin de ligne, 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
90
ChristopheD

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
21
AdamR

Il me semble qu'un peu de refactorisation pourrait aider. Pylint en regardant 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 __== '__main__':
    main()

Cela a l'avantage que si vous avez des classes utiles, je peux les importer sans exécuter votre main. Le __ nom __ est celui du module donc le "si" échoue.

16
ryszards0.02c

Dans les nouvelles versions de pylint, cette ligne est désormais

# pylint: disable=C0103

le message d'activation est aussi simple

# pylint: enable=C0103
11
studioj

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 le Locally disabling invalid-name avertissement. Notez que cet avertissement secondaire peut être utile si vous souhaitez être rappelé 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 n'émet pas d'avertissement indiquant que vous désactivez I0011!

3
banbh

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 lancer une nouvelle analyse, et que cela devrait sûrement être la cible, sinon pourquoi vous dérangez-vous, alors vous pouvez désactiver ce message et le message correspondant activé localement dans votre fichier de configuration:

disable=locally-disabled, locally-enabled
2
RobG