pylint模块文档字符串报pointless-string-statement报错解决
你遇到的两个矛盾报错本质是同一个问题:顶部的三引号字符串没有被pylint识别为合法模块文档字符串,因此pylint既判定该字符串是无执行效果的冗余语句,又判定模块缺失要求的docstring。按以下优先级排查即可解决:
优先检查文件编码是否带UTF-8 BOM头
你使用的pylint 2.14.4 + astroid 2.11.6 + Python 3.7.9的组合存在已知的BOM识别问题:如果文件保存为带BOM的UTF-8格式,开头3个不可见的BOM字节会让语法解析器跳过对docstring的识别。
直接在编辑器中将文件重新保存为无BOM的UTF-8编码即可,VS Code、PyCharm等主流编辑器都可以在底部状态栏直接切换编码选项,保存后重新执行pylint校验,90%的同版本环境报错都可以通过这个方法解决。检查docstring的位置是否符合规范
模块docstring必须是模块内的第一条有效语句,以下写法都会导致识别失败:- docstring前存在除shebang(
#!/usr/bin/env python)、编码声明(# -*- coding: utf-8 -*-)之外的其他代码、普通注释 - docstring起始位置混入全角空格、零宽空格等不可见异常字符
修复时把docstring移动到文件合法位置,删除异常字符即可,docstring前后保留正常空行不影响识别。
- docstring前存在除shebang(
临时误报规避方案
如果排查完上述两项问题仍然报错,可以针对当前文件单独关闭误报规则,不需要全局禁用docstring检查:在docstring上方添加一行pylint控制注释即可,示例如下:# pylint: disable=pointless-string-statement """Utilities for the online realtime model serving. Consider the latency of the serving response """不建议直接全局关闭
pointless-string-statement规则,否则会漏检代码中真正无意义的零散字符串。
注意:你当前使用的pylint 2.14.4已经是支持Python 3.7的最高版本,不需要再尝试升级,更高版本的pylint已经放弃Python 3.7支持,升级反而会出现兼容性问题。
内容的提问来源于stack exchange,提问作者mon

