python ast模块在pydev中失败,在cmdline python中成功

时间:2013-08-01 16:03:21

标签: python pydev

这很奇怪。我在PyDev中运行这个程序

import ast
import sys

if __name__ == '__main__':
    print sys.version
    src = '''
print 3*4+5**2
'''
    print dir(ast)
    n = ast.parse(src)
    print n

并输出:

2.7.5 |Anaconda 1.6.0 (64-bit)| (default, May 31 2013, 10:45:37) [MSC v.1500 64 bit (AMD64)]
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
Traceback (most recent call last):
  File ["C:\research\ast\ast\test1.py", line 16, in <module>
    n = ast.parse(src)
AttributeError: 'module' object has no attribute 'parse'

但是当我在cmdline中运行它时会打印出来:

C:\research\ast\ast>python test1.py
2.7.5 |Anaconda 1.6.0 (64-bit)| (default, May 31 2013, 10:45:37) [MSC v.1500 64
bit (AMD64)]
['AST', 'Add', 'And', 'Assert', 'Assign', 'Attribute', 'AugAssign', 'AugLoad', '
AugStore', 'BinOp', 'BitAnd', 'BitOr', 'BitXor', 'BoolOp', 'Break', 'Call', 'Cla
ssDef', 'Compare', 'Continue', 'Del', 'Delete', 'Dict', 'DictComp', 'Div', 'Elli
psis', 'Eq', 'ExceptHandler', 'Exec', 'Expr', 'Expression', 'ExtSlice', 'FloorDi
v', 'For', 'FunctionDef', 'GeneratorExp', 'Global', 'Gt', 'GtE', 'If', 'IfExp',
'Import', 'ImportFrom', 'In', 'Index', 'Interactive', 'Invert', 'Is', 'IsNot', '
LShift', 'Lambda', 'List', 'ListComp', 'Load', 'Lt', 'LtE', 'Mod', 'Module', 'Mu
lt', 'Name', 'NodeTransformer', 'NodeVisitor', 'Not', 'NotEq', 'NotIn', 'Num', '
Or', 'Param', 'Pass', 'Pow', 'Print', 'PyCF_ONLY_AST', 'RShift', 'Raise', 'Repr'
, 'Return', 'Set', 'SetComp', 'Slice', 'Store', 'Str', 'Sub', 'Subscript', 'Suit
e', 'TryExcept', 'TryFinally', 'Tuple', 'UAdd', 'USub', 'UnaryOp', 'While', 'Wit
h', 'Yield', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '
__version__', 'alias', 'arguments', 'boolop', 'cmpop', 'comprehension', 'copy_lo
cation', 'dump', 'excepthandler', 'expr', 'expr_context', 'fix_missing_locations
', 'get_docstring', 'increment_lineno', 'iter_child_nodes', 'iter_fields', 'keyw
ord', 'literal_eval', 'mod', 'operator', 'parse', 'slice', 'stmt', 'unaryop', 'w
alk']
<_ast.Module object at 0x0000000002A99EB8>

可能出现什么问题?

1 个答案:

答案 0 :(得分:2)

你在PyDev中导入的ast似乎不是标准库中的ast模块,而是一个包。

我想:

  

在test1.py所在的目录中有一个__init__.py文件   在项目创建期间选择了“将项目目录添加到PYTHONPATH”。

这两个组合,导致该错误。标准库中的ast模块被此ast包遮蔽。

在cmdline python中,此ast包不在搜索路径中,因此导入了ast模块。

如果将test1.py更改为

import ast

if __name__ == '__main__':
    print ast.__file__

我猜PyDev中的输出是

C:\research\ast\ast\__init__.pyc