Question

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 l'ensemble du fichier:

foo/bar.py:14: redefinition of unused 'json' from line 12

Comment puis-je amener Pyflakes à ignorer cela?

(Normalement j'irais lire les documents Mais le lien est rompu. Si personne n'a de réponse, je vais juste lire la source.)

Était-ce utile?

La solution

Si vous pouvez utiliser floke8 Au lieu de cela - qui enveloppe les pyflakes ainsi que le checker PEP8 - une ligne se terminant avec

# 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 sur cette ligne.

Autres conseils

Je sais que cela a été remis en question il y a quelque temps et est 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 Pyflakes, il me semble que Pyflakes est conçu pour qu'il soit facile de l'utiliser comme "vérificateur rapide intégré".

Pour implémenter les fonctionnalités Ignore, vous devrez écrire le vôtre qui appelle le vérificateur Pyflakes.

Ici, vous pouvez trouver une idée: http://djangosnippets.org/snippets/1762/

Notez que l'extrait ci-dessus uniquement pour les commentaires sur la même ligne. Pour ignorer un bloc entier, vous voudrez peut-être ajouter «pyflakes: ignorer» dans le bloc docstring et filtre basé sur Node.doc.

Bonne chance!


J'utilise Pocket-lint pour toutes sortes d'analyses de code statique. Voici les modifications apportées à la poche pour ignorer les pyflakes: https://code.launchpad.net/~adiroiban/pocket-lint/907742/+merge/102882

Voici un patch de singe pour les pyflakes qui ajoute un # bypass_pyflakes option de commentaire.

bypass_pyflakes.py

#!/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 sous 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 billet de problème github:

Bien que le correctif arrive toujours, c'est ainsi qu'il peut être travaillé, si vous vous demandez:

try:
    from unittest.runner import _WritelnDecorator
    _WritelnDecorator; # workaround for pyflakes issue #13
except ImportError:
    from unittest import _WritelnDecorator

Supply _uniTest et _Writelndecorator avec les entités (modules, fonctions, classes) dont vous avez besoin

-- déménager

Vous pouvez également importer avec __import__. Ce n'est pas pythonique, mais Pyflakes ne vous avertit 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 certains awk magie 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) sont exclus ($1 est le nom de 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 nombres de ligne et crée dynamiquement un regex fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top