在Python代码中标记“打印”语句

问题描述 投票:0回答:4

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

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

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

我怎样才能实现这个目标?

python lint static-code-analysis
4个回答
16
投票

flake8
有一个专门用于该任务的
flake8-print
插件:

flake8 打印

检查 python 文件中的 Print 语句。

演示:

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

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

9
投票

如果出于某种原因你不想按照@alecxe的建议使用

flake8-print
,你可以使用
ast
模块来滚动你自己的模块——它利用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.walk
os.listdir
或任何最合适的键。


0
投票

并不完美:像“print_something()”这样的行也会被检测到。但大多数情况应该这样处理:

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

0
投票

还有 Ruff,它实现了相同的 flake8-print 规则

使用这个简单的一行文件。

print("Hello print!")

通过选择 T 规则,可以快速检查带皱褶的打印语句。

(venv) PS G:\Testing> ruff test.py --select T
test.py:1:1: T201 `print` found
Found 1 error.

要以更永久的方式启用规则,您可以检查不同的配置 ruff

© www.soinside.com 2019 - 2024. All rights reserved.