4

AST でモジュール レベルのドキュメント文字列を解析することは可能ですか?

私はここでpythonドキュメンターに取り組んでおり、モジュールトークンにアクセスしてドキュメントを取得しても、モジュールレベルのdocstringは得られません。これまでのところ、モジュールをインポートして取得するか、ドキュメントを取得するために__doc__使用する必要がありました。inspect

pydoc モジュールのソースを調べて、他のドキュメンターが docstring を解析する方法の手がかりを探したところ、モジュール レベルの文字列を取得するために、pydoc が私のドキュメンターと基本的に同じことをしなければならないことがわかりました。

何か不足していますか?モジュールを実際にインポートしてモジュールレベルのdocstringを解析する唯一の方法ですか、それともASTから直接docstringを解析することは可能ですか?

4

1 に答える 1

5

たぶん私は誤解しています-質問を理解していますが、これを行うことはできませんか(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'
于 2012-02-02T23:26:49.617 に答える