我不想在 Python 模块中使用“打印”语句,因为我们将使用记录器。
我正在尝试生成一个脚本来使用 pylint 检查模块。 但是,pylint 目前不会将此检测为警告或错误。
我想根据我们的内部 Python 编程标准将“打印”调用检测为错误或警告。
我怎样才能实现这个目标?
flake8
有一个专门用于该任务的 flake8-print
插件:
flake8 打印
检查 python 文件中的 Print 语句。
演示:
$ cat test.py
s = "test"
print s
$ flake8 test.py
test.py:2:1: T001 print statement found.
如果出于某种原因你不想按照@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
或任何最合适的键。
并不完美:像“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
还有 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。