如何验证Python脚本的语法?
我只想让我的Python脚本以最简单的方式询问“我刚才生成的Python代码在语法上是否有效?” 我试过:如何验证Python脚本的语法?,python,python-2.7,validation,syntax-error,Python,Python 2.7,Validation,Syntax Error,我只想让我的Python脚本以最简单的方式询问“我刚才生成的Python代码在语法上是否有效?” 我试过: try: import py_compile x = py_compile.compile(generatedScriptPath, doraise=True) pass except py_compile.PyCompileError, e: print str(e) pass 但是,即使文件包含无效的Python,也不会抛出异
try:
import py_compile
x = py_compile.compile(generatedScriptPath, doraise=True)
pass
except py_compile.PyCompileError, e:
print str(e)
pass
但是,即使文件包含无效的Python,也不会抛出异常,之后就不需要使用了。它的预期用途是从给定的源文件编写字节码文件。事实上,如果您没有在目录中写入的权限,它将失败,因此您可能最终会出现一些错误的否定
为了仅仅解析并验证语法,您可以使用模块来解析文件的内容,或者直接调用内置函数
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
请确保不要执行该文件,因为如果您不能信任其内容(如果您甚至不知道该文件是否包含有效语法,我怀疑即使您生成了这些内容,您也不能真正信任这些内容),您可能会执行恶意代码。您是否可以尝试导入生成的模块并捕获ImportError(如果模块丢失)或SyntaxError(如果模块无效)?或者,
ast.parse
在解析无效Python代码时会引发异常。无效Python是什么意思?如果您只想解析模块,可以使用模块的函数。事实上,有一个内置函数可以用来实现这一点。@Rogalski是的。。。如果那个文件是用户提供的并且包含恶意代码呢?这给了我一个例外。您对“无效Python代码”做了哪些尝试?仅供参考:py_compile
也是一个示例。