为什么python的解析器会在这个简单的输入上抛出错误?

时间:2014-04-24 21:30:36

标签: python parsing abstract-syntax-tree

我有以下代码 -

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

这似乎是一个非常简单的解析文件 - 它肯定会运行 - 为什么解析器会抛出此错误?

2 个答案:

答案 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]: