6

我无法解决 flake8 SyntaxError 并且虽然代码执行得很好。

在此处输入图像描述

没有注释的代码

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)
4

2 回答 2

1

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 的情况下正常工作

PyCharm 首选项屏幕截图

于 2019-04-08T12:44:44.910 回答
0

正如@jonrsharpe 所说,我同意,这是因为代码是在 Python 2 中运行的,但在 Python 3 中是 linted。

来自flake8 错误代码文档

当我们无法将文件编译为需要它的插件的抽象语法树时,我们会报告 E999。

因此,为了证明这是正确的,使用一个名为bad_syntax.py并使用与上述相同的print语法的文件:

print "test answer", len([])

当我使用 Python 2 运行它时,一切都很顺利:

james@codebox:/tmp/lint$ python --version
Python 2.7.12
james@codebox:/tmp/lint$ python bad_syntax.py
test answer 0

使用 Python 2 环境调用的Lintingflake8也通过了。

但是当我使用 Python 3 进行 lint(这是在安装了 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 上运行。

于 2018-06-21T12:47:14.697 回答