flake8-带有python3元类参数的E999语法错误

时间:2018-10-09 07:44:32

标签: python metaclass flake8

我正在使用vim进行flake8作为linter的python开发。以下是包含中继词的示例代码。 Flake8在行class Spam(metaclass=MyMeta)上显示错误 E999 SyntaxError:语法无效(E) 。我正在使用python3,这是在python3中指定自定义元类的正确语法。

class MyMeta(type):

    def __new__(cls, clsname, bases, clsbody):
        upper_case = {}
        for k, v in clsbody.items():
            if not k.startswith('__'):
                upper_case[k.upper()] = v
        return super().__new__(cls, clsname, bases, upper_case)


class Spam(metaclass=MyMeta):
    foo = 'bar'

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

好吧,您正在编辑Python3代码,而flake8显然正在检查Python2的语法。

环顾互联网,迫使flake8检查Python3的直接方法是从 Python3运行它。

您可能在Linux或其他Unix上使用(我从VIM使用中得到了提示),因此,如果flake8是在系统范围内安装的,请卸载它,然后将其安装在Python3中(在fedora和redhatish发行版中,它是{ {1}} dnf uninstall python2-flake8)。

一种更适当的方法可能是为您的Python项目设置一个virtualenv,并使用所需的Python版本,在该virtualenv中安装flake8,并使用dnf install python3-flake8,并且从您的virtualenv内部启动VIM,以便它运行的任何Python脚本或程序都在同一环境中,甚至高级自动完成之类的功能也可以检查您的项目实际使用的库。