如何验证Python脚本的语法?

How to validate the syntax of a Python script?

本问题已经有最佳答案,请猛点这里访问。

我只是希望我的Python脚本能够以最简单的方式询问"我刚刚生成语法上有效的Python的Python代码吗?"

我试过了:

1
2
3
4
5
6
7
8
try:  
    import py_compile  
    x = py_compile.compile(generatedScriptPath, doraise=True)  
    pass  

except py_compile.PyCompileError, e:
    print str(e)
    pass

但即使使用包含无效Python的文件,也不会抛出异常,然后x == None


无需使用py_compile。 它的用途是从给定的源文件中写入一个字节码文件。 事实上,如果你没有在目录中写入的权限,它将会失败,因此你可能会得到一些误报。

要解析并验证语法,可以使用ast模块parse文件的内容,或直接调用compile内置函数。

1
2
3
4
5
6
7
8
9
10
11
import ast

def is_valid_python_file(fname):
    with open(fname) as f:
        contents = f.read()
    try:
        ast.parse(contents)
        #or compile(contents, fname, 'exec', ast.PyCF_ONLY_AST)
        return True
    except SyntaxError:
        return False

确保不执行该文件,因为如果您不能信任其内容(如果您甚至不知道该文件是否包含有效语法,我怀疑您实际上可以信任内容,即使您生成它们)也可能最终执行恶意 码。