我正在使用使用pyflakes的SublimePythonIDE.我希望忽略一些错误,例如:
(E501) line too long
Run Code Online (Sandbox Code Playgroud)
(E101) indentation contains mixed spaces and tabs
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么?
有时,似乎未使用的Python模块导入实际上对于程序的正常运行至关重要。看似未使用的导入会引起来自PyFlakes之类的工具的虚假消息,并且可能引起狂热的程序员不必要的注意。例如,C ++(自C ++ 11起)有一种惯用的方式来用[[unused]]
属性来表明这一点([[maybe_unused]]
自C ++ 17起)。
我特别是在像Flask这样的Web框架的情况下问这个问题,通常是这种情况。例如,Flask应用程序中的以下样板代码对于正常运行是必不可少的:
from app import auth_routes, app, db
from app.resources import api
Run Code Online (Sandbox Code Playgroud)
我通常通过以下方式处理这种情况
import X
assert X is not None # Explanatory comment
Run Code Online (Sandbox Code Playgroud)
有没有一种关于意图的更明确的方法和更多的“ Pythonic”来实现这一目标?
我注意到 pylint 不能很好地处理以下情况:
@property
def foo(self):
return self._bar.foo
@foo.setter
def foo(self, foo_val):
self._bar.foo = foo_val
Run Code Online (Sandbox Code Playgroud)
虽然它是自 python2.6 以来完全有效的 case 语法
它说我定义了 foo 两次,并且不理解“.setter”语法(给出 E1101 和 E0102)。
有没有无需更改代码的解决方法?我不想禁用错误,因为它们对其他地方很重要。
有没有其他工具可以更好地处理它?我已经检查过 pyflakes 并且它的行为方式相同。PyDev 的代码分析似乎可以更好地处理这种特定情况,但它不会检查 pylint 所做的约定、重构和其他很酷的功能,而且我无法从外部脚本运行它(或者我可以吗??)
谢谢!
我的项目使用宽度为4的空格进行缩进.
但是,在其上运行flake8会产生警告,表示预期的制表符/缩进宽度为2个空格.
如何配置flake8以正确接受4个空格进行缩进?
class Foo(object):
bar = True
Run Code Online (Sandbox Code Playgroud)
上面提到的是我的(过度简化的)代码片段flake8标记第2行,警告说:
[W0311] Bad indentation. Found 4 spaces, expected 2
Run Code Online (Sandbox Code Playgroud)
我正在使用带有flake8插件的vim.
在我的.pylintrc
:
[FORMAT]
indent-string=' '
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何.pylintrc
进入画面,因为linting是由flake8 vim插件完成的
使用flake8,要在一行中禁用某个错误,请执行以下操作:
example = lambda: 'example' # noqa: E731,E123
Run Code Online (Sandbox Code Playgroud)
但是,如果我有多行语句,则flake8无法在末尾解析noqa语句:
from detect_fixtures import expected_response_stage3_mocked, expected_response_bbox_oob,\
mock_detection, mock_detection_models, mock_detection_stage1, mock_detection_stage2,\
mock_detection_stage3_given_bbox, mock_load_image # noqa: F401
Run Code Online (Sandbox Code Playgroud)
我想使用“ \”作为延续,所以我不想这样做(确实可行)
from detect_fixtures import (expected_response_stage3_mocked, # noqa: F401
expected_response_bbox_oob, img, mock_detection, mock_detection_models, # noqa: F401
mock_detection_stage1, mock_detection_stage2, mock_detection_stage3_given_bbox, # noqa: F401
mock_load_image) # noqa: F401
Run Code Online (Sandbox Code Playgroud)
这里有什么帮助吗?
我目前正在使用以下代码在emacs中连接flymake和Pyflakes:
(defun flymake-create-temp-in-system-tempdir (filename prefix)
(make-temp-file (or prefix "flymake")))
Run Code Online (Sandbox Code Playgroud)
然后我将此功能传递给flymake-init-create-temp-buffer-copy
.(摘自http://hustoknow.blogspot.com/2010/09/emacs-and-pyflakes-using-tmp-directory.html).
这段代码工作正常,直到昨天.当我访问某些Python文件时,我收到以下错误:
switched OFF Flymake mode for buffer admin.py due to fatal status
CFGERR, warning Configuration error has occured while running
(pyflakes ../../../../../../../tmp/flymake28459SVv)
Run Code Online (Sandbox Code Playgroud)
为什么flymake会将看似错误的文件名传递给pyflakes?我希望它传递类似"/ tmp/efe234234"的东西,我没有修改任何tmp目录设置.
我不记得最近为Ubuntu更新了emacs,也无法想到任何可能导致这个问题陷入困境的事情(.emacs文件版本化).
我能想到的唯一问题是,这是一个嵌套到目录中的嵌套目录,这个目录符号链接到〜/ Dropbox目录中的目录,但这种情况不会以类似的方式发生在其他符号链接中.
我该如何解决这个问题?
UPDATE
我做了一些调试,现在我发现它没有传递正确的路径作为参数.它需要在路径中插入一个更多的父目录才能使它工作,这让我觉得它因为符号链接而变得混乱.
这是一个示例shell会话,以显示我的意思.我是从正确的相对目录中这样做的:
$ pyflakes ../../../../../tmp/flymake13382xHi
../../../../../tmp/flymake13382xHi: No such file or directory
Run Code Online (Sandbox Code Playgroud)
这就是flymake试图运行的命令.如果我改变它:
$ pyflakes ../../../../../../tmp/flymake13382xHi
Run Code Online (Sandbox Code Playgroud)
我没有输出(如预期的那样).注意路径中的额外"..".
我如何让flymake通过绝对路径而不是这些疯狂的相对路径?
更新2
我已经把一切都搞定了.基本上有这个功能:
(defun flymake-pyflakes-init ()
; Make sure it's not a remote buffer or flymake would not work
(when (not …
Run Code Online (Sandbox Code Playgroud) 我在python 3.5.1编写,我是一个编程新手.
我根据python样式指南使用带有pep8和pyflakes插件的gedit来显示样式错误.我不知道是否要遵循风格推荐信.
然而,我有三个反复出现的风格缺陷E501: line too long (80 > 79 characters)
,E502: the backslash is redundant between brackets
并且E128/E127/...: continuation line under-indented for visual indent
.截图如下.
我的两个问题是:
E501
和随后的风格的错误E502
和E127/128
?这段代码:
def foo():
print("hello")
Run Code Online (Sandbox Code Playgroud)
违反PEP 0008,其中规定
每个缩进级别使用 4 个空格。
但是,无论是pep8
,pyflakes
或flake8
命令,警告一下吧。
我怎样才能让他们中的一个人抱怨这个 unpythonic 代码?
无法在Windows上运行pyflakes.
在Windows上没有apt install
,所以...该怎么办?
pyflakes ×10
python ×10
pep8 ×3
pylint ×3
flake8 ×2
conventions ×1
emacs ×1
flask ×1
flymake ×1
gedit ×1
nosetests ×1
pydev ×1
python-3.5 ×1
python-3.x ×1
sublimetext ×1
testing ×1
windows ×1