自扫描代码以防止打印状态

cap*_*oke 5 python

我有一个我正在研究的python项目,而不是print语句,我调用函数say(),这样我就可以在开发过程中打印信息并在生产过程中记录日志信息.但是,我经常忘记这一点并错误地将print语句放入代码中.有没有让python程序读取自己的源代码,如果在函数say()之外找到任何print语句,则退出()?

Thi*_*ter 7

这可以使用该ast模块完成.以下代码将查找print语句以及print()函数的任何调用,以防您print_function将来使用Python 3或Python 2 .

import ast

class PrintFinder(ast.NodeVisitor):
    def __init__(self):
        self.prints_found = []

    def visit_Print(self, node):
        self.prints_found.append(node)
        super(PrintFinder, self).generic_visit(node)

    def visit_Call(self, node):
        if getattr(node.func, 'id', None) == 'print':
            self.prints_found.append(node)
        super(PrintFinder, self).generic_visit(node)


def find_print_statements(filename):
    with open(filename, 'r') as f:
        tree = ast.parse(f.read())
    parser = PrintFinder()
    parser.visit(tree)
    return parser.prints_found

print 'hi'
for node in find_print_statements(__file__):
    print 'print statement on line %d' % node.lineno
Run Code Online (Sandbox Code Playgroud)

这个例子的输出是:


上线24 print语句
上线26 print语句