编程语言
首页 > 编程语言> > 解析Python模块文档字符串

解析Python模块文档字符串

作者:互联网

是否可以使用AST解析模块级文档字符串?

我正在使用python documenter here并访问模块令牌,而抓取文档不会产生模块级docstring.到目前为止,我不得不求助于导入模块并获取其__doc__或使用inspect来获取文档.

我查看了pydoc module来源,以了解其他文档编制者如何解析docstrings的线索,并发现pydoc最终必须要做与我的文档编制者基本相同的事情才能获取模块级字符串.

我想念什么吗?是通过实际导入模块解析模块级文档字符串的唯一方法,还是可以直接从AST中解析文档字符串?

解决方法:

也许我错过了这个问题,但是您不能这样做吗(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,查找doc字符串所在的插槽.

>>> 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'

标签:docstring,python,parsing
来源: https://codeday.me/bug/20191101/1985937.html