我们的许多模块都以:
开头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忽略这一点?
(通常情况下,我会阅读the docs,但链接已损坏。如果没有人有答案,我只会阅读来源。)
答案 0 :(得分:200)
如果您可以使用flake8代替 - 包裹pyflakes以及pep8检查器 - 以
结尾的行 # NOQA
(其中空间很重要 - 代码末尾与#
之间有2个空格,其中一个空格与NOQA
文本之间)会告诉检查程序忽略该行上的任何错误
答案 1 :(得分:43)
我知道这是前一段时间受到质疑的,已经得到了解答。
但我想添加我通常使用的内容:
try:
import json
assert json # silence pyflakes
except ImportError:
from django.utils import simplejson as json # Python 2.4 fallback.
答案 2 :(得分:7)
是的,不幸的是,dimod.org与所有好吃的东西都在一起。
看看pyflakes代码,在我看来pyflakes的设计使它很容易被用作“嵌入式快速检查器”。
为了实现忽略功能,你需要自己编写调用pyflakes检查器。
在这里你可以找到一个想法:http://djangosnippets.org/snippets/1762/
请注意,上面的代码段仅用于注释放在同一行。 要忽略整个块,您可能需要在块docstring中添加'pyflakes:ignore'并基于node.doc进行过滤。
祝你好运!我正在使用pocket-lint进行各种静态代码分析。以下是用于忽略pyflakes的pocket-lint所做的更改:https://code.launchpad.net/~adiroiban/pocket-lint/907742/+merge/102882
答案 3 :(得分:6)
这是pyflakes的猴子补丁,添加了# bypass_pyflakes
注释选项。
#!/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
答案 4 :(得分:5)
虽然修复工作仍在进行中,但如果您想知道,可以解决这个问题:
try: from unittest.runner import _WritelnDecorator _WritelnDecorator; # workaround for pyflakes issue #13 except ImportError: from unittest import _WritelnDecorator
使用您需要的实体(模块,函数,类)替换_unittest和_WritelnDecorator
答案 5 :(得分:2)
您也可以使用__import__
导入。它不是pythonic,但pyflakes不再警告你了。请参阅documentation for __import__
。
try:
import json
except ImportError:
__import__('django.utils', globals(), locals(), ['json'], -1)
答案 6 :(得分:0)
我创建了一个带有一些awk
魔法的小shell脚本来帮助我。有了import typing
,from typing import
或#$
(后者是我在这里使用的特殊注释)的所有行都被排除在外($1
是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 ...
基本上它会记下行号并动态创建一个正则表达式。
答案 7 :(得分:0)
对于flake8
,这是推荐替代方案(比较 flake8 与 pyflakes here)
添加第一行,如:
# flake8: noqa: E121, E131, E241, F403, F405
一般:
# flake8: noqa: <code>[, <code> ...]
通过这种方式,您可以在一行中静默 entire file
并为 many
忽略语句 at once
执行此操作,这通常是一种情况。
答案 8 :(得分:0)
Flake 给你 some options to ignore violations。
我最喜欢的是明确表示并忽略内联的特定违规:
my invalid code # noqa: WS03
并且您已经引用了其他选项。
my invalid code # NOQA
# flake8: noqa: E121, E131, E241, F403, F405
或者配置为在 flake8 配置中忽略它作为参数。