我正在使用 vim 以 flake8 作为 linter 进行 python 开发。下面是包含元类的示例代码。 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
).
更合适的方法可能是设置一个 virtualenv对于你的 Python 项目,使用所需的 Python 版本,在这个 virtualenv 中安装 flake8,使用 pip install flake8
,也从你的 virtualenv 中启动 VIM,这样任何 Python 脚本或者它运行的程序在同一个环境中,甚至高级自动完成之类的东西也可以检查你的项目实际使用的库。
关于python - flake8 - E999 语法错误与 python3 元类参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52715767/