是否可以使用AST解析模块级文档字符串?
我正在使用python documenter here并访问模块令牌并获取文档并不会产生模块级文档字符串。到目前为止,我不得不求助于导入模块并抓取其__doc__
或使用inspect
来获取文档。
我查看了pydoc module源代码,了解其他文档管理员如何解析文档字符串,并发现pydoc最终必须与我的文档管理器基本相同才能获取模块级字符串。 / p>
我错过了什么吗?是通过实际导入模块来解析模块级文档字符串的唯一方法,还是可以直接从AST解析文档字符串?
答案 0 :(得分:4)
也许我想念 - 理解这个问题,但你不能这样做(python 2.7.1)吗?
测试文件:
"""
DOC STRING!!
"""
def hello():
'doc string'
print 'hello'
hello()
互动环节:
>>> M = ast.parse(''.join(open('test.py')))
>>> ast.get_docstring(M)
'DOC STRING!!'
您还可以浏览ast,查找文档字符串所在的插槽。
>>> M._fields
('body',)
>>> M.body
[<_ast.Expr object at 0x10e5ac710>, <_ast.FunctionDef object at 0x10e5ac790>, <_ast.Expr object at 0x10e5ac910>]
>>> # doc would be in the first slot
>>> M.body[0]._fields
('value',)
>>> M.body[0].value
<_ast.Str object at 0x10e5ac750>
>>> # it contains a string object, so maybe it's the doc string
>>> M.body[0].value._fields
('s',)
>>> M.body[0].value.s
'\nDOC STRING!!\n'