我正在使用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'
有没有办法解决这个问题?
答案 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脚本或程序都在同一环境中,甚至高级自动完成之类的功能也可以检查您的项目实际使用的库。