我需要使用parser
模块检查python源是否存在严重错误(即检查源的一般正确性)。我很想使用parser.suite(src)
和parser.expr(src)
。但是这些方法总是构建解析树。
例如,如果我应用于输入随机文本文件而不是python源,我会得到一个包含(n, 'Err')
的树,其中n
- 解析元素的数量(我也可以得到) SyntaxError
)。但是如果我的源代码包含一些名为(n, 'Err')
的元素,那么我的源代码也可能包含Err
。
那么,我如何区分不正确来源的树(一般不正确的错误)?
答案 0 :(得分:1)
你可以这样做:
#!/usr/bin/env python
from __future__ import print_function
from sys import argv
try:
compile(open(argv[1]).read(), argv[1], 'exec', 0, 1)
except SyntaxError as err:
print('%s:%s:%s: %s' % (err.filename, err.lineno, err.offset, err.msg))
这适用于Python 2和Python 3。
答案 1 :(得分:0)
感谢@ lcd047,我解决了我的问题:
import parser, sys
def check_serious_errors(fname):
return parser.st2tuple(parser.suite(open(fname).read()))
if __name__ == '__main__':
try:
tree = check_serious_errors(sys.argv[1])
except SyntaxError:
print("Gross errors was found. Exit")
else:
print("File is correct in general. Let's move further!")
# Further analysis