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

flake8 - E999 syntax error with python3 metaclass argument

我正在使用 vim 进行 python 开发,使用 flake8 作为 linter。下面是包含元类的示例代码。 Flake8 在行 class Spam(metaclass=MyMeta) 上显示错误 E999 SyntaxError: invalid syntax (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'

有办法解决这个问题吗?

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

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

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

一个更合适的方法可能只是为您的 Python 项目设置一个 virtualenv,使用所需的 Python 版本,在这个 virtualenv 中安装 flake8,使用 pip install flake8从你的虚拟环境中启动VIM,这样任何Python脚本或程序都运行在同一个环境中,并且甚至高级自动完成之类的东西也可以检查您的项目实际使用的库。