标记Python代码中的“print”语句
我不想在我们的Python模块里看到“print”语句,因为我们会使用一个日志记录工具。
我正在尝试生成一个脚本,用来检查模块是否符合pylint的标准。
不过,目前pylint并没有把这个当作警告或错误来处理。
我想要把“print”调用检测为错误或警告,以符合我们内部的Python编程标准。
我该怎么做呢?
4 个回答
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
2
还有一个叫做 Ruff 的工具,它实现了和 flake8-print 规则 一样的功能。
只需要用一个简单的一行文件。
print("Hello print!")
通过选择 T 规则,可以快速用 ruff 检查代码中的打印语句。
(venv) PS G:\Testing> ruff test.py --select T
test.py:1:1: T201 `print` found
Found 1 error.
如果想要更永久地启用这些规则,可以 查看如何配置 ruff。
10
如果因为某些原因你不想使用@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
或者其他更合适的方法。
17
flake8
有一个专门的插件叫 flake8-print
,可以用来完成特定的任务:
flake8-print
用于检查 Python 文件中的打印语句。
演示:
$ cat test.py
s = "test"
print s
$ flake8 test.py
test.py:2:1: T001 print statement found.