“Non utilisé à l'importation d'avertissement” et pylint
Donc je suis en train de travailler sur un projet en Python et en essayant de le tenir à des normes pylint et juste en général . Donc, j'ai un fichier source, (Nous allons l'appeler un.py)
#a.py
import loggingsetup
def foo():
log.info("This is a log message")
Mais, je veux contrôler ce que l'enregistrement ressemble, donc dans loggingsetup j'ai quelque chose comme:
#loggingsetup.py
import logging
logging.root.setLevel(logging.DEBUG)
consoleOut = logging.StreamHandler()
consoleOut.setLevel(logging.INFO)
consoleOut.setFormatter(logging.Formatter("\t"+logging.BASIC_FORMAT))
logging.root.addHandler(consoleOut)
#etc
Maintenant, cela semble fonctionner très bien. Je suppose que comme une question préalable, je dois vous demander si c'est la bonne façon d'aller à ce sujet, ou si il y a une autre façon de structurer mon code qui serait préférable.
Mais ma principale question est que quand je lance pylint sur un.py j'ai un avertissement comme "non utilisé de l'import - import loggingsetup", puisque je ne suis pas fait appel de méthodes ou de fonctions de loggingsetup.
Je pourrais faire quelque chose comme redéfinir le corps de loggingsetup comme une fonction et de l'appeler, mais il semble stupide et sujette à erreur (j'aurais à vous soucier de l'appeler deux fois si je ne l'importation loggingsetup d'autre part, et si je comprends comment python gère les importations, ce n'est pas un problème avec mon installation actuelle).
Je pourrais évidemment juste dire pylint d'ignorer l'avertissement, mais je pensais que je demande ici d'abord pour s'assurer que ce n'est pas vraiment quelque chose que je dois gérer différemment.
- L'importation d'un module juste pour ses effets secondaires, on se sent mal pour moi. Il fait l'intention de votre code plus difficile à discerner. Explicite est mieux qu'implicites.
- C'est juste un avertissement que vous avez oublié quelque chose et/ou peut-être faire quelque chose de superflu. L'ignorer si ce n'est pas le cas.
- Je me suis en désaccord avec ce qui précède, le sentiment de martineau. Oui, parfois, c'est comment ça se passe, et vous avez d'ignorer les avertissements, mais généralement mises en garde ne devrait pas être traités comme des "rappels amicaux" et ignoré sans en être certains, c'est pourquoi je suis venu à faire certain que je pourrais l'ignorer, ou d'obtenir une meilleure approche.
Vous devez vous connecter pour publier un commentaire.
L'approche que je voudrais utiliser est d'utiliser
loggingsetup
comme une sorte de wrapper pourlogging
.Puis dans d'autres modules:
Vous souhaitez utiliser un autre nom que
loggingsetup
dans ce cas, par exemple,tweaked_logging
oulogging_with_my_settings
.# pylint: disable-msg-cat=
commentaire en haut de votre module emballage devrait vous permettre de supprimer certaines catégories de mises en garde dans ce module uniquement. Au moins vous avez isolé de tous les "mauvais" pour un seul module. 🙂Dans de tels cas, vous pouvez toujours indiquer explicitement pylint que ces droits à l'importation dans l'intention:
Avis de l'instruction est sur la même ligne que l'importation afin W0611 est seulement désactivé pour cette ligne, et pas pour tout le bloc ci-dessous.
Si vous utilisez
pylint
etflake8
vous pouvez ignorer inutilisés à l'importation d'avertissement dans les deux outils de cette façon:votre code doit être dans une fonction appelée une fois dans le script principal
Comme vous l'avez mentionné vous-même en l'enveloppant dans une fonction et l'appel de la configuration explicitement permettrait de résoudre cet avertissement. Et comme Steven mentionné, cela serait considéré comme un code de meilleure qualité, car il est plus explicite sur ce que vous faites.
Si vous vous inquiétez à propos de l'appel de cette fonction deux fois, vous pouvez bien sûr utiliser un module stagiaire drapeau pour permettre l'exécution du corps de la fonction qu'une seule fois.
Ici est de savoir comment vous pourriez satisfaire l'avertissement (vscode + pylint);
Donc, au lieu d'utiliser une wild card, a précisé "array" méthode de nouveau.