解析 Python 模块文档字符串

发布于 2025-01-01 07:12:38 字数 440 浏览 1 评论 0原文

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

我正在开发一个 python 文档编写器 here 并访问模块令牌并获取文档不会产生模块 -级别文档字符串。到目前为止,我不得不导入模块并获取其 __doc__ 或使用 inspect 来获取文档。

我研究了 pydoc 模块 源代码以获取有关其他文档编写人员如何解析文档字符串的线索,并发现pydoc 最终必须做与我的文档编写器基本相同的事情才能获取模块级字符串。

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

Is it possible to parse module-level docstrings with the AST?

I am working on a python documenter here and visiting the module tokens and grabbing the documentation does not yield the module-level docstring. So far, I've had to resort to importing the module and grabbing its __doc__ or using inspect to grab the documentation.

I looked into the pydoc module source for clues as to how other documenters parse docstrings, and discovered that pydoc ends up having to do basically the same thing as my documenter in order to grab the module-level strings.

Am I missing something? Is the only way to parse module-level docstrings through actually importing the module, or is it possible to parse the docstrings out of the AST directly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

⒈起吃苦の倖褔 2025-01-08 07:12:38

也许我错过了理解这个问题,但是你不能这样做吗(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'

Maybe I miss-understand the question, but can't you just do this (python 2.7.1)?

test file:

"""
DOC STRING!!
"""

def hello():
    'doc string'
    print 'hello'

hello()

Interactive session:

>>> M = ast.parse(''.join(open('test.py')))
>>> ast.get_docstring(M)
'DOC STRING!!'

You can also walk through the ast, looking for the slot the doc string would be in.

>>> 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'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文