Как заставить 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 ответов:
Если вы можете использовать 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 с сущностями (модулями, функциями, классами), которые вам нужны
вы также можете импортировать с
__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 ...
в основном он отмечает номер строки и динамически создает регулярное выражение из него.