在Python代码中标记“print”语句

时间:2014-08-11 18:02:22

标签: python lint static-code-analysis

我不想在Python模块中使用“print”语句,因为我们将使用记录器。

我正在尝试生成一个脚本来检查带有pylint的模块。 但是,pylint当前不会将此检测为警告或错误。

我希望根据我们的内部Python编程标准将“print”调用检测为错误或警告。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:12)

flake8有一个专门针对该任务的flake8-print插件:

  

flake8打印

     

检查python文件中的Print语句。

样本:

$ cat test.py
s = "test"
print s

$ flake8 test.py
test.py:2:1: T001 print statement found.

答案 1 :(得分:7)

如果出于某种原因,你不想按照@alecxe的建议使用flake8-print,你可以使用ast模块自行推送 - {1}}模块使用Python的编译器解析文件,以便您可以可靠地找到print(而不是仅以print开头的行):

<强>代码

import ast

with open('blah.py') as fin:
    parsed = ast.parse(fin.read())

for node in ast.walk(parsed):
    if isinstance(node, ast.Print):
        print 'print at line {} col {}'.format(node.lineno, node.col_offset)

<强> blah.py

def print_test():
    print 'hello'

print 'goodbye'

<强>输出

print at line 4 col 0
print at line 2 col 1

如果您希望浏览文件夹或子文件夹,可以使用os.walkos.listdir或其他最合适的内容。

答案 2 :(得分:0)

不完美:像&#39; print_something()&#39;也会被发现。但是大多数情况应该是这样的:

import os
import sys

for root, dirs, files in os.walk(sys.argv[1]):
    dirs.sort()
    for file in files:
        file=os.path.join(root, file)
        for i, line in enumerate(open(file)):
            line=line.strip()
            if line.startswith('print'):
                print file, i, line