python - flake8 - Como faço para o Pyflakes ignorar uma declaração?



install pep8 python (5)

Aqui está um patch de macaco para os flocos de neve que adiciona uma opção de comentário # bypass_pyflakes .

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()

Se você salvar isso como bypass_pyflakes.py , poderá invocá-lo como python bypass_pyflakes.py myfile.py .

http://chase-seibert.github.com/blog/2013/01/11/bypass_pyflakes.html

https://src-bin.com

Muitos de nossos módulos começam com:

try:
    import json
except ImportError:
    from django.utils import simplejson as json  # Python 2.4 fallback.

... e é o único aviso do Pyflakes em todo o arquivo:

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

Como posso fazer com que o Pyflakes ignore isso?

(Normalmente eu leria os documentos, mas o link está quebrado. Se ninguém tiver uma resposta, eu vou ler a fonte.)


Answer #1

Eu criei um pequeno shell script com alguma magia awk para me ajudar. Com isso, todas as linhas com import typing , from typing import ou #$ (o último é um comentário especial que estou usando aqui) são excluídas ( $1 é o nome do arquivo do 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 ...

Basicamente, ele observa os números de linha e dinamicamente cria um regex para fora dele.


Answer #2

Para citar o github.com/kevinw/pyflakes/issues/13 do github.com/kevinw/pyflakes/issues/13 :

Enquanto a correção ainda está chegando, é assim que pode ser trabalhada, se você está se perguntando:

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

Substância _unittest e _WritelnDecorator com as entidades (módulos, funções, classes) que você precisa

- deemoowoor


Answer #3

Se você pode usar flake8 vez disso - o que envolve pirexes, assim como o verificador pep8 - uma linha que termina com

# NOQA

(no qual o espaço é significativo - 2 espaços entre o final do código e o # , um entre ele e o texto do NOQA ) irá dizer ao verificador para ignorar quaisquer erros naquela linha.


Answer #4

Você também pode importar com __import__ . Não é pythonic, mas pyflakes não te avisa mais. Veja a documentação para __import__ .

try:
    import json
except ImportError:
    __import__('django.utils', globals(), locals(), ['json'], -1)




pyflakes