Как заставить 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 игнорировать это?
(Обычно я читал документы, но ссылка сломана. Если никто не имеет ответа, я просто прочитаю источник.)
Ответы
Ответ 1
Если вы можете вместо этого использовать flake8 - который обертывает pyflakes так же, как и pep8 checker - строка, заканчивающаяся на
# NOQA
(в котором существенное пространство - 2 пробела между концом кода и #
, один между ним и текстом NOQA
) скажет, что контрольная панель игнорирует любые ошибки в этой строке.
Ответ 2
Я знаю, что это было допрошено некоторое время назад и уже ответили.
Но я хотел добавить то, что я обычно использую:
try:
import json
assert json # silence pyflakes
except ImportError:
from django.utils import simplejson as json # Python 2.4 fallback.
Ответ 3
Да, к сожалению, dimod.org упал вместе со всеми лакомствами.
Посмотрев на код pyflakes, мне кажется, что pyflakes спроектирован так, что будет легко использовать его как "встроенную быструю проверку".
Для реализации функции игнорирования вам необходимо написать свой собственный, который вызывает проверку pyflakes.
Здесь вы можете найти идею: http://djangosnippets.org/snippets/1762/
Обратите внимание, что приведенный выше фрагмент доступен только для комментариев в одной и той же строке.
Для игнорирования целого блока вы можете добавить "pyflakes: ignore" в блок docstring и фильтр на основе node.doc.
Удачи!
Я использую карманный линт для всех видов статического анализа кода. Вот изменения, внесенные в карман-линт для игнорирования pyflakes: https://code.launchpad.net/~adiroiban/pocket-lint/907742/+merge/102882
Ответ 4
Чтобы процитировать сообщение github issue:
Пока исправление все еще наступает, вот как это можно обойти, если вам интересно:
try:
from unittest.runner import _WritelnDecorator
_WritelnDecorator; # workaround for pyflakes issue #13
except ImportError:
from unittest import _WritelnDecorator
Подпись _unittest и _WritelnDecorator с объектами (модулями, функциями, классами), которые вам нужны
- deemoowoor
Ответ 5
Вот патч обезьяны для pyflakes, который добавляет параметр комментария # bypass_pylakes
.
#!/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
Ответ 6
Вы также можете импортировать с помощью __import__
. Это не пифонический, но пикфекс больше вас не предупреждает. См. документация для __import__
.
try:
import json
except ImportError:
__import__('django.utils', globals(), locals(), ['json'], -1)
Ответ 7
Я создал небольшую оболочку script с некоторой магией awk
, чтобы помочь мне. При этом все строки с import typing
, from typing import
или #$
(последний является специальным комментарием, который я использую здесь) исключаются ($1
- это имя файла Python script):
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 ...
В основном он отмечает номера строк и динамически создает регулярное выражение.