这是我flake8
在验证期间的输出:
Traceback (most recent call last):
File "/usr/local/bin/flake8", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/dist-packages/flake8/main.py", line 25, in main
flake8_style = get_style_guide(parse_argv=True, config_file=DEFAULT_CONFIG)
File "/usr/local/lib/python2.7/dist-packages/flake8/engine.py", line 244, in get_style_guide
options.exclude.extend(pep8.normalize_paths(EXTRA_EXCLUDE))
AttributeError: 'module' object has no attribute 'normalize_paths'
Run Code Online (Sandbox Code Playgroud)
为什么我不能使用它?
我flake8
在Visual Studio Code中使用,使用Python 3.6变量注释编写一些代码.到目前为止它没有任何问题,但我遇到了一个奇怪的警告.
这很好用:
style: str = """
width: 100%;
...
"""
# Doing sth with `style`
Run Code Online (Sandbox Code Playgroud)
这个也是:
img_style: str = """
width: 100%;
...
"""
# Doing sth with `img_style`
Run Code Online (Sandbox Code Playgroud)
但是,这不会产生以下警告:
iframe_style: str = """
width: 100%;
...
"""
# Doing sth with `iframe_style`
Run Code Online (Sandbox Code Playgroud)
嗯,从技术上讲它确实很好; 代码运行.但不知何故flake8
对此并不满意.多行字符串和后面的代码始终相同.
当我省略"f"(i_rame_style
)时,我也没有收到警告!所以我想由于某种原因,flake8想到了if foo: bar()
这里!?
我在这里错过了什么?这是一个错误flake8
吗?
请不要将此视为“提出并回答”的问题。我真诚地一直在努力弄清楚为什么这已经停止工作,如果这是一个 VS Code 问题,或者一个 Flake8 问题,或者如果我只是疯了,应该找到另一种方法来解决这个问题。
在寻找一种方法来阻止 Flake8 linter 的“文件太长”和“未使用”警告时,我找到了一个被列为 StackFlow 上最热门的解决方案之一。我完全复制并粘贴了它,它起作用了!很好,但是在遵循 Django 项目教程时,可以了解 admin.py 文件中的这段代码:
from django.contrib import admin
from .models import Choice, Question
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
Run Code Online (Sandbox Code Playgroud)
突然,(设置已经工作好几天了),我收到了这个问题警告:行太长(80 > 79 个字符) flake8(E501) (13,80)
我知道我可能对此过于挑剔,但这确实很烦人。我还读到,我可以使用反斜杠来打破行,而不会破坏代码的连续性,但我也尝试过,并收到一条消息,说括号内的反斜杠是多余的。
我返回到设置并检查它们是否仍然与 Args 所建议的实际上一样有效。我删除了更改。我关闭并重新启动 VS Code,返回并再次重新插入设置。仍然遇到相同的错误,我不知道 Flake8 从哪里获取并重现错误消息,其中 80 大于 79 信息。
有谁知道为什么设置突然停止工作并且 flake8 恢复忽略它在设置中被指示忽略的参数?
这是对我不起作用的热门解决方案:VS Code、首选项、用户设置、扩展、Python、Linting、Flake8 Args
"python.linting.flake8Args": [
"--max-line-length=120", …
Run Code Online (Sandbox Code Playgroud) 请考虑以下示例,该示例在列表中查找包含子字符串“OH”的第一个字符串:
list = ["STEVE", "JOHN", "YOANN"]
pattern = re.compile(".*%s.*" % "OH")
word = ""
if any((match := pattern.match(item)) for item in list):
word = match.group(0)
print(word)
Run Code Online (Sandbox Code Playgroud)
该代码按预期工作并输出“JOHN”,但我从 flake8 行收到以下警告word = match.group(0)
:
F821 -- undefined name 'match'
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况?我可以在没有命令行参数的情况下删除警告或禁用所有 F821 错误吗?
当我为函数编写单元测试并运行时flake8 test_function().py
,收到以下错误:
S101 检测到断言的使用。编译为优化字节代码时,所包含的代码将被删除。
我的问题:
如何在不使用assert
关键字的情况下编写单元测试?
我们应该忽略 flake8 配置中的单元测试吗?
在未对预提交配置文件进行更改的情况下,预提交运行突然失败。尝试初始化 Flake8 环境时,日志显示以下错误消息:
...
[INFO] Initializing environment for https://gitlab.com/pycqa/flake8.git.
An unexpected error has occurred: CalledProcessError: command: ('/usr/bin/git', 'fetch', 'origin', '--tags')
return code: 128
expected return code: 0
stdout: (none)
stderr:
fatal: could not read Username for 'https://gitlab.com': No such device or address
...
Run Code Online (Sandbox Code Playgroud)
预提交配置文件包含以下条目:
---
repos:
- repo: https://gitlab.com/pycqa/flake8.git
rev: 3.9.2
hooks:
- id: flake8
exclude: 'tests|env|docs'
Run Code Online (Sandbox Code Playgroud) PEP8建议:
Imports should be grouped in the following order:
1. standard library imports
2. related third party imports
3. local application/library specific imports
You should put a blank line between each group of imports.
Run Code Online (Sandbox Code Playgroud)
我正在使用Flake8Lint哪个Sublime Text插件用于lint Python文件。
我的代码如下:
import logging
import re
import time
import urllib
import urlparse
from flask import Blueprint
from flask import redirect
from flask import request
from flask.ext.login import current_user
from flask.ext.login import login_required
from my_application import one_module
Run Code Online (Sandbox Code Playgroud)
它将显示警告如下:
导入语句的顺序错误,来自my_application的应该比来自flask.ext.login的要早。
但是flask是第三方库,应该在我my_application
导入之前。这就是为什么?如何解决?
我们用它flake8
来测试我们的代码,我们pytest
用夹具。以下代码:
from staylists.tests.fixtures import fixture1 # noqa: F401
def test_case(fixture1): # noqa: F811
# Test goes here
assert 1 == 1
Run Code Online (Sandbox Code Playgroud)
lib/python/test.py:3:1: F811 redefinition of unused 'fixture1' from line 1
在 linting 期间生成错误。
在Python中,留下这样的尾随逗号当然不是SyntaxError
:
In [1]: x = 1 ,
In [2]: x
Out[2]: (1,)
In [3]: type(x)
Out[3]: tuple
Run Code Online (Sandbox Code Playgroud)
但是,与此同时,如果尾随的逗号被意外添加,可能很难捕捉到这种"问题",特别是对于新手来说.
我想我们是否可以在智能代码质量控制功能的帮助下,早期,静态地捕捉到这种"问题"PyCharm
; mypy
,pylint
或flake8
静态代码分析工具.
或者,另一个想法是限制/突出显示一个项目元组隐式没有括号.可能吗?
我的 databricks python 代码位于github
. 我设置了一个基本工作流程来使用flake8
. 这会失败,因为当我的脚本在 databricks 上运行时隐式可用的名称(例如spark
、、等)在databricks 外部(在 github ubuntu vm 中)进行 lint时不可用。sc
dbutils
getArgument
flake8
如何在github
使用中检查 databricks 笔记本flake8
?
例如我得到的错误:
test.py:1:1: F821 undefined name 'dbutils'
test.py:3:11: F821 undefined name 'getArgument'
test.py:5:1: F821 undefined name 'dbutils'
test.py:7:11: F821 undefined name 'spark'
Run Code Online (Sandbox Code Playgroud)
我的笔记本在github上:
dbutils.widgets.text("my_jdbcurl", "default my_jdbcurl")
jdbcurl = getArgument("my_jdbcurl")
dbutils.fs.ls(".")
df_node = spark.read.format("jdbc")\
.option("driver", "org.mariadb.jdbc.Driver")\
.option("url", jdbcurl)\
.option("dbtable", "my_table")\
.option("user", "my_username")\
.option("password", "my_pswd")\
.load()
Run Code Online (Sandbox Code Playgroud)
我的 .github/workflows/lint.yml
on:
pull_request:
branches: …
Run Code Online (Sandbox Code Playgroud) flake8 ×10
python ×9
python-3.x ×2
apache-spark ×1
databricks ×1
elpy ×1
emacs ×1
flymake ×1
github ×1
mypy ×1
pre-commit ×1
pycharm ×1
pylint ×1
python-3.6 ×1
regex ×1
sublimetext3 ×1
unit-testing ×1