Beaucoup de nos modules commencent par:
try:
import json
except ImportError:
from Django.utils import simplejson as json # Python 2.4 fallback.
... et c'est le seul avertissement Pyflakes dans tout le fichier:
foo/bar.py:14: redefinition of unused 'json' from line 12
Comment puis-je faire en sorte que Pyflakes l'ignore?
(Normalement j'irais lire les docs mais le lien est cassé. Si personne n'a de réponse, je lirai juste la source.)
Si vous pouvez utiliser flake8 à la place - qui enveloppe pyflakes ainsi que le vérificateur pep8 - une ligne se terminant par
# NOQA
(dans lequel l’espace est significatif - 2 espaces entre la fin du code et le #
, un entre lui et le NOQA
texte) indiquera au vérificateur d’ignorer les erreurs éventuelles sur cette ligne.
Je sais que cela a été remis en question il y a quelque temps et que l'on y a déjà répondu.
Mais je voulais ajouter ce que j'utilise habituellement:
try:
import json
assert json # silence pyflakes
except ImportError:
from Django.utils import simplejson as json # Python 2.4 fallback.
Oui, malheureusement, dimod.org est en panne avec tous les goodies.
En regardant le code de pyflakes, il me semble que pyflakes est conçu pour être facile à utiliser comme "vérificateur rapide intégré".
Pour implémenter les fonctionnalités d'ignorer, vous devrez écrire votre propre appelant le vérificateur pyflakes.
Ici vous pouvez trouver une idée: http://djangosnippets.org/snippets/1762/
Notez que l'extrait ci-dessus ne concerne que les emplacements de commentaires situés sur la même ligne. Pour ignorer un bloc entier, vous pouvez ajouter "pyflakes: ignore" à la docstring block et filtrer en fonction de node.doc.
Bonne chance!
J'utilise pocket-lint pour tout type d'analyse de code statique. Voici les modifications apportées à pocket-lint pour ignorer pyflakes: https://code.launchpad.net/~adiroiban/pocket-lint/907742/+merge/102882
Voici un patch de singe pour pyflakes qui ajoute un # bypass_pyflakes
option de commentaire.
#!/usr/bin/env python
from pyflakes.scripts import pyflakes
from pyflakes.checker import Checker
def report_with_bypass(self, messageClass, *args, **kwargs):
text_lineno = args[0] - 1
with open(self.filename, 'r') as code:
if code.readlines()[text_lineno].find('bypass_pyflakes') >= 0:
return
self.messages.append(messageClass(self.filename, *args, **kwargs))
# monkey patch checker to support bypass
Checker.report = report_with_bypass
pyflakes.main()
Si vous enregistrez ceci en tant que bypass_pyflakes.py
, alors vous pouvez l'invoquer comme python bypass_pyflakes.py myfile.py
.
http://chase-seibert.github.com/blog/2013/01/11/bypass_pyflakes.html
Pour citer le ticket d’émission github :
Alors que le correctif est encore à venir, voici comment résoudre le problème, si vous vous demandez:
try: from unittest.runner import _WritelnDecorator _WritelnDecorator; # workaround for pyflakes issue #13 except ImportError: from unittest import _WritelnDecorator
Substitude _unittest et _WritelnDecorator avec les entités (modules, fonctions, classes) dont vous avez besoin
Vous pouvez également importer avec __import__
. Ce n'est pas Pythonic, mais pyflakes ne vous prévient plus. Voir documentation pour __import__
.
try:
import json
except ImportError:
__import__('Django.utils', globals(), locals(), ['json'], -1)
J'ai créé un petit script Shell avec la magie awk
pour m'aider. Avec cela toutes les lignes avec import typing
, from typing import
ou #$
_ (ce dernier est un commentaire spécial que j’utilise ici) est exclu ($1
est le nom du fichier du script Python):
result=$(pyflakes -- "$1" 2>&1)
# check whether there is any output
if [ "$result" ]; then
# lines to exclude
excl=$(awk 'BEGIN { ORS="" } /(#\$)|(import +typing)|(from +typing +import )/ { print sep NR; sep="|" }' "$1")
# exclude lines if there are any (otherwise we get invalid regex)
[ "$excl" ] &&
result=$(awk "! /^[^:]+:(${excl}):/" <<< "$result")
fi
# now echo "$result" or such ...
Fondamentalement, il note les numéros de ligne et crée dynamiquement une regex.