使用解析器模块检查Python 3源中的严重错误

时间:2015-06-27 08:27:57

标签: python parsing python-3.x

我需要使用parser模块检查python源是否存在严重错误(即检查源的一般正确性)。我很想使用parser.suite(src)parser.expr(src)。但是这些方法总是构建解析树。

例如,如果我应用于输入随机文本文件而不是python源,我会得到一个包含(n, 'Err')的树,其中n - 解析元素的数量(我也可以得到) SyntaxError)。但是如果我的源代码包含一些名为(n, 'Err')的元素,那么我的源代码也可能包含Err

那么,我如何区分不正确来源的树(一般不正确的错误)?

2 个答案:

答案 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