Как заставить 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 _WritelnDecoratorSubstitude _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 ...в основном он отмечает номер строки и динамически создает регулярное выражение из него.