我不想在Python模块中使用“print”语句,因为我们将使用记录器。
我正在尝试生成一个脚本来检查带有pylint的模块。 但是,pylint当前不会将此检测为警告或错误。
我希望根据我们的内部Python编程标准将“print”调用检测为错误或警告。
我怎样才能做到这一点?
答案 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.walk
或os.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