Maw*_*awg 1 python validation syntax-error python-2.7
我只是想让我的 Python 脚本以最简单的方式询问“我刚刚生成的 Python 代码在语法上是有效的 Python 吗?”
我试过:
try:
import py_compile
x = py_compile.compile(generatedScriptPath, doraise=True)
pass
except py_compile.PyCompileError, e:
print str(e)
pass
Run Code Online (Sandbox Code Playgroud)
但即使文件包含无效的Python,异常也不会抛出,之后x == None。
没有必要使用py_compile。它的预期用途是从给定的源文件写入字节码文件。事实上,如果您没有在目录中写入的权限,它就会失败,因此最终可能会出现一些漏报。
要仅解析并验证语法,您可以使用该ast模块来parse解析文件的内容,或直接调用compile内置函数。
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
Run Code Online (Sandbox Code Playgroud)
请务必不要执行该文件,因为如果您不能信任其内容(并且如果您甚至不知道该文件是否包含有效的语法,我怀疑您实际上可以信任这些内容,即使您生成了它们),您最终可能会执行恶意代码。