Flake8 报告 E999 SyntaxError adam Flake8
Flake8 reports E999 SyntaxError atom Flake 8
我无法解决 flake8 语法错误,尽管代码执行得很好。
没有注释的代码
import math
def answer(str_n):
sume = ((str_n * (str_n + 1)) / 2) * math.sqrt(2)
sume = int(sume)
return sume
def answer1(str_n):
sume = 0
for i in range(str_n + 1):
sume += math.floor(i * math.sqrt(2))
# print i,math.floor(i*math.sqrt(2))
return sume
print "Test answer:", answer(77)
print "Actual answer:", answer1(77)
正如@jonrsharpe 所说,我同意,这是因为代码在 Python 2 中为 运行,但在 Python 3 中被删除。
来自flake8 documentation on error codes:
We report E999 when we fail to compile a file into an Abstract Syntax Tree for the plugins that require it.
为了证明这是正确的,使用名为 bad_syntax.py
的文件并使用与上述相同的 print
语法:
print "test answer", len([])
当我运行这个和Python2的时候,一切都很开心:
james@codebox:/tmp/lint$ python --version
Python 2.7.12
james@codebox:/tmp/lint$ python bad_syntax.py
test answer 0
在 Python 2 环境中调用 flake8
的 Linting 也通过了。
但是当我用 Python 3 进行 lint 时(这是 运行ning 在安装了 Python 3 的 virtualenv venv
中,E999
是返回:
(venv) james@codebox:/tmp/lint$ flake8 --version
3.5.0 (mccabe: 0.6.1, pycodestyle: 2.3.1, pyflakes: 1.6.0) CPython 3.5.2 on Linux
(venv) james@codebox:/tmp/lint$ flake8 bad_syntax.py
bad_syntax.py:1:19: E999 SyntaxError: invalid syntax
我不认为这是一个需要在 linter-flake8
内部更改的设置,因为 Flake8 将使用 Python 的版本,它是 运行 通过的。我的猜测是 Flake8 在 Python 3 上是 运行 因为它已经安装在 Python 3 环境中,即使代码是 运行 在 Python 2.
Flake8 启动器已 Python3 硬编码为主 python。
如何修复:
1) 使用 pip 安装 flake8 包
$ pip install flake8
pip 会告诉您 flake8 脚本尚未添加到路径并打印路径(/Library/Frameworks/Python.framework/Versions/2.7/bin/
在我的例子中)
2) 调整您的 IDE (Atom/PyCharm/etc) 以使用此脚本与您的默认 Python 2.7(我的示例来自 PyCharm @ MacOS):
PyCharm -> Preferences -> External tools -> "flake8 - current file"
Program: /usr/local/bin/python
Arguments: /Library/Frameworks/Python.framework/Versions/2.7/bin/flake8 --ignore=E501,E124,E127,E128 $FilePath$
Working directory: $FileDir$
[x] open console for tool output
Output filters: $FILE_PATH$\:$LINE$\:.*
不用报告也能正常工作E999.has
我无法解决 flake8 语法错误,尽管代码执行得很好。
没有注释的代码
import math
def answer(str_n):
sume = ((str_n * (str_n + 1)) / 2) * math.sqrt(2)
sume = int(sume)
return sume
def answer1(str_n):
sume = 0
for i in range(str_n + 1):
sume += math.floor(i * math.sqrt(2))
# print i,math.floor(i*math.sqrt(2))
return sume
print "Test answer:", answer(77)
print "Actual answer:", answer1(77)
正如@jonrsharpe 所说,我同意,这是因为代码在 Python 2 中为 运行,但在 Python 3 中被删除。
来自flake8 documentation on error codes:
We report E999 when we fail to compile a file into an Abstract Syntax Tree for the plugins that require it.
为了证明这是正确的,使用名为 bad_syntax.py
的文件并使用与上述相同的 print
语法:
print "test answer", len([])
当我运行这个和Python2的时候,一切都很开心:
james@codebox:/tmp/lint$ python --version
Python 2.7.12
james@codebox:/tmp/lint$ python bad_syntax.py
test answer 0
在 Python 2 环境中调用 flake8
的 Linting 也通过了。
但是当我用 Python 3 进行 lint 时(这是 运行ning 在安装了 Python 3 的 virtualenv venv
中,E999
是返回:
(venv) james@codebox:/tmp/lint$ flake8 --version
3.5.0 (mccabe: 0.6.1, pycodestyle: 2.3.1, pyflakes: 1.6.0) CPython 3.5.2 on Linux
(venv) james@codebox:/tmp/lint$ flake8 bad_syntax.py
bad_syntax.py:1:19: E999 SyntaxError: invalid syntax
我不认为这是一个需要在 linter-flake8
内部更改的设置,因为 Flake8 将使用 Python 的版本,它是 运行 通过的。我的猜测是 Flake8 在 Python 3 上是 运行 因为它已经安装在 Python 3 环境中,即使代码是 运行 在 Python 2.
Flake8 启动器已 Python3 硬编码为主 python。
如何修复:
1) 使用 pip 安装 flake8 包
$ pip install flake8
pip 会告诉您 flake8 脚本尚未添加到路径并打印路径(/Library/Frameworks/Python.framework/Versions/2.7/bin/
在我的例子中)
2) 调整您的 IDE (Atom/PyCharm/etc) 以使用此脚本与您的默认 Python 2.7(我的示例来自 PyCharm @ MacOS):
PyCharm -> Preferences -> External tools -> "flake8 - current file"
Program: /usr/local/bin/python
Arguments: /Library/Frameworks/Python.framework/Versions/2.7/bin/flake8 --ignore=E501,E124,E127,E128 $FilePath$
Working directory: $FileDir$
[x] open console for tool output
Output filters: $FILE_PATH$\:$LINE$\:.*
不用报告也能正常工作E999.has