10.24更新
建议使用flake8作为lint,不会报类似的错误了
pylint的静态检查过于严格,现在最流行的是flake8用来lint,black用来format
原文分割线
相关问题
环境:在vscode中使用python3.7,调用第三方库vtk-8.2.0生成的包
错误:出现no module
、no member
、undefined variable
错误,但实际代码能够正常运行
解决方案
添加pylint附加项--ignored-modules=vtk
,可解决no member
和no module
报错
开头改为from vtk.util.colors import light_grey
,可解决后续undefined variable
报错
具体原因
见github.com/PyCQA/pylint/issues/1524
大意是说有可能是以下两种原因:
- 该模组是c拓展,pylint读不到源码,也不知道模组有哪些成员
- 该模组采用动态特性比如
globals().update
来更新文件,pylint无法分析这种动态成员
可用--ignored-modules=vtk
、--generated-members=vtk.*
、--extension-pkg-whitelist=vtk
等类似的方式来禁用相关模组的静态代码检查
PS
虽然解决了pylint报错问题,但仍然无法做到自动补全等智能操作,治标不治本
归根到底还是python的语言特性,像c++这种有头文件的可能就不会出现这种情况吧