使用解析器modu检查python3源代码中的严重错误

2024-03-28 11:02:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用parser模块检查python源代码是否有重大错误(即检查源代码的一般正确性)。我三次使用parser.suite(src)parser.expr(src)。但是这些方法总是构建解析树。你知道吗

例如,如果我应用于输入随机文本文件而不是python源代码,我会得到一个树,其中包含(n, 'Err'),其中n-parse元素的编号(我也可以得到SyntaxError)。但是我的源代码也可能包含(n, 'Err'),如果它包含一些名为Err的元素。你知道吗

那么,我怎样才能分辨出错误来源的树(通常是错误的,有严重错误)?你知道吗


Tags: 模块方法srcparser元素源代码parse错误
2条回答

你可以这样做:

#!/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))

这适用于python2和python3。你知道吗

感谢@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

相关问题 更多 >