Vim中flake8报错Python3.6 f-string语法错误的解决办法咨询
解决Vim中flake8/syntastic对Python3.6 f-string的语法报错问题
我来帮你搞定这个头疼的问题!之前我也碰到过类似的情况,大概率是工具版本或者Vim配置没跟上Python3.6的新语法,咱们一步步排查:
第一步:先确认flake8版本是否支持f-string
早期的flake8版本(比如3.0之前)完全不认识Python3.6的f-string语法,肯定会报语法错。你先打开终端,激活你的virtualenv环境,执行:
flake8 --version
如果版本低于3.6,赶紧升级到最新稳定版:
pip install --upgrade flake8
第二步:让syntastic调用virtualenv里的flake8
很多时候syntastic会默认用系统全局的旧版flake8,而不是你当前虚拟环境里的新版本。你需要在.vimrc里加几行配置,强制它用当前环境的工具:
" 指定syntastic用flake8作为Python检查工具 let g:syntastic_python_checkers = ['flake8'] " 让syntastic使用当前环境的flake8(而不是系统全局的) let g:syntastic_python_flake8_exec = 'flake8' " 如果用了vim-virtualenv插件,开启自动激活确保路径正确 let g:virtualenv_auto_activate = 1
保存配置后重启Vim,再打开你的Python文件试试。
第三步:验证vim-jedi的Python环境关联
虽然你之前解决过jedi的兼容问题,但还是要确认它识别的是Python3.6+的环境。在Vim里输入:JediDebugInfo,看输出里的Python版本和路径是不是你当前的virtualenv。如果不对,就在.vimrc里手动指定解释器路径:
let g:jedi#python_path = '/你/的/虚拟环境路径/bin/python'
第四步:排查flake8的规则误判
有时候可能是flake8的某个插件或者自定义规则误判了f-string。你可以在项目根目录新建一个.flake8配置文件,先临时禁用语法错误类的检测,看看报错是否消失:
[flake8] extend-ignore = E999
如果禁用后不报错了,再慢慢排查是哪个插件或规则出了问题。
要是以上步骤都试过还是不行,你可以在Vim里执行:SyntasticInfo,把输出的flake8调用命令和路径贴出来,咱们再进一步分析~
内容的提问来源于stack exchange,提问作者Bestasttung




