Как заставить Pyflakes игнорировать заявление?


многие наши модули начинаются с:

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

...и это единственное предупреждение Pyflakes во всем файле:

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

Как я могу заставить Pyflakes игнорировать это?

(обычно я бы пошел читать документы но связь нарушена. Если ни у кого нет ответа, я просто прочитаю источник.)

7 114

7 ответов:

Если вы можете использовать flake8 вместо этого-который обертывает pyflakes, а также PEP8 checker-строка, заканчивающаяся

# NOQA

(в котором пробел значителен - 2 пробела между концом кода и #, между ним и NOQA текст) скажет контролеру игнорировать любые ошибки в этой строке.

Я знаю, что это был допрошен некоторое время назад и уже ответил.

но я хотел добавить то, что я обычно использую:

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

да, к сожалению dimod.org спускается вместе со всеми вкусностями.

глядя на код pyflakes, мне кажется, что pyflakes разработан так, что его будет легко использовать в качестве "встроенной быстрой проверки".

для реализации функции игнорировать вам нужно будет написать свой собственный, который вызывает pyflakes checker.

здесь вы можете найти идею: http://djangosnippets.org/snippets/1762/

обратите внимание, что выше фрагмент только ибо для комментариев места в одной строке. За игнорирование целого блока вы, возможно, захотите, чтобы добавить 'pyflakes:игнорировать' в блоке строкой документации и фильтр, основанный на узле.доктор.

удачи!


Я использую pocket-lint для всех видов статического анализа кода. Здесь представлены изменения, внесенные в Pocket-lint для игнорирования pyflakes: https://code.launchpad.net/~adiroiban/карманный Линт/907742/+слияние/102882

вот патч обезьяны для pyflakes, который добавляет # 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()

если вы сохраните его как bypass_pyflakes.py, то вы можете вызвать его, как python bypass_pyflakes.py myfile.py.

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

цитата из оформить билет на GitHub:

в то время как исправление все еще идет, вот как это можно обойти, если вам интересно:

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

Substitude _unittest и _WritelnDecorator с сущностями (модулями, функциями, классами), которые вам нужны

--deemoowoor

вы также можете импортировать с __import__. Это не питон, но pyflakes больше не предупреждает вас. Смотрите документация __import__ .

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

Я создал небольшой скрипт оболочки с некоторыми awk магию, чтобы помочь мне. При этом все строки с import typing,from typing import или #$ (последний специальный комментарий я использую здесь) исключены ( - имя файла скрипта Python ):

result=$(pyflakes -- "" 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="|" }' "")

    # exclude lines if there are any (otherwise we get invalid regex)
    [ "$excl" ] &&
        result=$(awk "! /^[^:]+:(${excl}):/" <<< "$result")

fi

# now echo "$result" or such ...

в основном он отмечает номер строки и динамически создает регулярное выражение из него.