我需要逐行解析python代码。代码:
ast.parse("""if True:
print 'Yes' """)
返回 AST 对象,但此行不是:
ast.parse("if True:")
有没有办法以某种方式解析它?(使用 RE 进行文本解析除外)
我需要这个来修改python代码,在用户交互式输入python代码后逐行修改。
我需要逐行解析python代码。代码:
ast.parse("""if True:
print 'Yes' """)
返回 AST 对象,但此行不是:
ast.parse("if True:")
有没有办法以某种方式解析它?(使用 RE 进行文本解析除外)
我需要这个来修改python代码,在用户交互式输入python代码后逐行修改。
您只能解析完整有效的 python 语句或表达式。if True:
不完整:如果你试图解析它,你会得到一个语法错误。
解决方法是先判断是否有完整的语句或表达式;如果不这样做,请缓冲该行并继续读取新行,直到遇到语法错误或完整的表达式。然后在缓冲输入上使用 ast。
该compile_command
函数可以区分可能不完整而不是不正确的代码字符串。如果代码显示不完整,则返回None
; 否则它返回一个代码对象(如果有效)或引发一个SyntaxError
.
我们可以使用这个函数来确定是缓冲还是解析一行。以下未经测试的代码:
linebuffer = []
while True:
line = raw_input()
linebuffer.append(line)
try:
compiled = code.compile_command(''.join(linebuffer))
except SyntaxError:
linebuffer = []
else:
if compiled is not None:
tree = ast.parse(''.join(linebuffer))
linebuffer = []
我认为这里唯一的方法是正则表达式。
在用户交互输入 python 代码之后。
看起来您的 python 代码实际上只是文本对象,而不是 python 代码......
为什么正则表达式不适合你?