我有以下代码 -
from sys import version
class ExampleClass(object):
def get_sys_version(self):
return version
x = ExampleClass()
print x.get_sys_version()
它将被此代码解析 -
import ast
source = open("input.py")
code = source.read()
node = ast.parse(code, mode='eval')
并导致此错误 -
Traceback (most recent call last):
File "parse.py", line 5, in <module>
node = ast.parse(code, mode='eval')
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 37, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 1
from sys import version
这似乎是一个非常简单的解析文件 - 它肯定会运行 - 为什么解析器会抛出此错误?
答案 0 :(得分:11)
这是因为您使用mode='eval'
,它仅适用于单个表达式。您的代码有多个语句,因此请改用mode='exec'
。 (这是默认值)
有关mode
参数的说明,请参阅documentation for compile()
,因为这是ast.parse()
使用的内容。
答案 1 :(得分:-1)
与ast
无关。
尝试时会出现同样的错误:
In [1]: eval('from sys import version')
File "<string>", line 1
from sys import version
^
SyntaxError: invalid syntax
尝试exec
模式:
In [1]: exec('from sys import version')
In [2]: