19

如果我有一串 Python 代码,我如何判断它是否有效,即,如果在 Python 提示符下输入,它会引发 SyntaxError 与否?我认为 usingcompiler.parse会起作用,但显然该模块已在 Python 3 中删除。有没有办法在 Python 3 中也适用。显然,我不想执行代码,只需检查它的语法。

4

2 回答 2

25

使用ast.parse

import ast
def is_valid_python(code):
   try:
       ast.parse(code)
   except SyntaxError:
       return False
   return True

>>> is_valid_python('1 // 2')
True
>>> is_valid_python('1 /// 2')
False
于 2012-08-07T22:06:08.367 回答
4

编译器模块现在是一个内置的.

compile(source, filename, mode[, flags[, dont_inherit]])

将源代码编译为代码或 AST 对象。代码对象可以由 exec 语句执行或通过调用 eval() 进行评估。source 可以是字符串或 AST 对象。有关如何使用 AST 对象的信息,请参阅 ast 模块文档。

AST 解析器现在是一个单独的模块

ast.parse(expr, filename='<unknown>', mode='exec')

将表达式解析为 AST 节点。相当于compile(expr, filename, mode, ast.PyCF_ONLY_AST)

于 2012-08-07T22:06:55.573 回答