如何在 Python 中对幻数进行 lint(静态分析代码)?

Utk*_*tku 5 python static-analysis pylint

谷歌搜索“pylint magic number”没有返回任何有用的东西。有没有办法对 Python 代码进行神奇数字的lint 处理?

(我放置了,但答案可以在任何 Python linter 中。)

Ira*_*ter 1

最简单的方法是构建一个Python语言标记器,并挑选出所有常量标记。

我们的源代码搜索引擎在语言记号生成器的驱动下,从大量文件中跨语言记号进行搜索(它有大约 40 个这样的记号,包括 Python 2 和 3)。通过声明对标记序列的约束来形成查询,例如

 I=*abc* '('
Run Code Online (Sandbox Code Playgroud)

意思是“查找包含字母“abc”后跟左括号标记的标识符。” 并打印出找到的实例。[此类查询会自动忽略空格和注释标记]

您想要的查询可以表述为:

 N>2
Run Code Online (Sandbox Code Playgroud)

意思是,“查找值大于 2 的数字标记”,假设 0 和 1 不符合魔术常量的条件。(恕我直言,他们和其他人一样神奇,但有不同意见的余地,我想提供一个并非完全微不足道的例子)。

您可以使用词法分析器生成器(请参阅“Flex”)复制此内容,并在顶部使用一些自定义代码来过滤数字标记。