web-dev-qa-db-fra.com

Pylint désactive tous les avertissements pour un fichier

Nous utilisons pylint dans notre système de construction. Nous avons un paquet python dans notre base de code qui contient du code jetable, et je voudrais désactiver temporairement tous les avertissements pour un module afin que je puisse arrêter de bugner les autres développeurs avec ces messages superflus. existe-t-il un moyen simple de pylint: disable tous les avertissements pour un module?

71
mvanveen

De la FAQ PyLint

Avec Pylint <0,25, ajoutez

# pylint: disable-all

au début du module.

Pylint 0.26.1 et plus ont renommé cette directive en

# pylint: skip-file

(mais la première version sera conservée pour des raisons de compatibilité descendante).

Afin de faciliter la recherche des modules ignorés, un message de niveau information I0013 est émis. Avec les versions récentes de Pylint, si vous utilisez l'ancienne syntaxe, un message I0014 supplémentaire est émis.

90
enderskill

PyLint a cinq "catégories" pour les messages (dont je suis au courant).

Ces catégories étaient très évidentes dans le passé, mais les messages numérotés Pylint ont maintenant été remplacés par des noms. Par exemple, C0302 est maintenant too-many-lines. Mais le "C" nous dit que too-many-lines est un message de convention . C'est déroutant, car les messages de convention apparaissent souvent comme un avertissement, car de nombreux systèmes (tels que Syntastic ) semblent tout classer comme un avertissement ou une erreur. Cependant, le rapport PyLint décompose toujours les choses en ces catégories, il est donc définitivement pris en charge.

Votre question fait spécifiquement référence aux avertissements et à tous les noms de message PyLint Warning start avec 'W'.

C'était un peu difficile pour moi de retracer cela, mais cette réponse m'a finalement conduit à la réponse. PyLint prend toujours en charge la désactivation de catégories entières de messages. Donc, pour désactiver tous les avertissements , vous feriez:

disable=W

Cela peut être utilisé sur la ligne de commande:

$ pylint --disable=W myfile.py

Ou, vous pouvez le mettre dans votre fichier pylintrc:

[MESSAGES CONTROL]
disable=W

Remarque: vous avez peut-être déjà l'option disable dans votre fichier rc, auquel cas vous devez ajouter le 'W' à cette liste.

Ou, vous pouvez le mettre en ligne dans votre code, où il fonctionnera pour la portée dans laquelle il est placé:

# pylint: disable=W

Pour le désactiver pour un fichier entier, il est préférable de le placer tout en haut du fichier. Cependant, même en haut du fichier, j'ai trouvé que j'obtenais toujours le trailing-newlines message d'avertissement (techniquement un avertissement de convention , mais j'y arrive).

Dans mon cas, j'avais une bibliothèque écrite par quelqu'un d'il y a longtemps. Cela fonctionnait bien, donc il n'y avait vraiment pas besoin de s'inquiéter de la moderne Python, etc. Tout ce qui m'intéressait vraiment, c'était les erreurs qui briseraient probablement mon code.

Ma solution a été de désactiver tous les Warning , Convention , et Refactorisation des messages pour ce fichier uniquement en plaçant la commande PyLint suivante sur la première ligne:

# pylint: disable=W,C,R

Mis à part le message susmentionné pour les nouvelles lignes de fin, cela a fait exactement ce dont j'avais besoin.

20
eatcrayons

Oui, vous pouvez spécifier # pylint: skip-file, mais il est déconseillé de désactiver tous les avertissements pour un fichier. Le code jetable ne doit pas exister dans une branche analysée par pylint.

Si vous souhaitez désactiver uniquement des avertissements spécifiques, vous pouvez le faire en ajoutant un commentaire tel que # pylint: disable=message-name pour désactiver le message spécifié pour le reste du fichier, ou au moins jusqu'à # pylint: enable=message-name.

Exemple:

# pylint: disable=no-member
class C123:
    def __init__(self):
        self.foo_x = self.bar_x
# pylint: enable=no-member

class C456:
    def __init__(self):
        self.foo_x = self.bar_x
12
Acumenus

Une autre option consiste à utiliser le --ignore option de ligne de commande pour ignorer l'analyse de certains fichiers.

6
sthenault

Mon cas d'utilisation est d'exécuter pylint *.py Pour traiter tous les fichiers d'un répertoire, sauf que je veux ignorer un fichier particulier.

L'ajout de #pylint: skip-file A provoqué l'échec de pylint avec I: 8, 0: Ignoring entire file (file-ignored). L'ajout de #pylint: disable=file-ignored Ne résout pas ce problème. Vraisemblablement, c'est une erreur globale plutôt qu'une erreur spécifique au fichier.

La solution consistait à inclure --disable=file-ignored Dans les options de la commande pylint. Il a fallu beaucoup trop de temps pour comprendre cela; il ne devrait pas y avoir d'erreur file-ignored lorsque vous ignorez explicitement un fichier.

0
Curt