Python モジュール内のすべての docstring の開始行番号と終了行番号を抽出しようとしています。正規表現なしでこれを行う賢明な方法はありますか?
質問する
671 次
1 に答える
4
これを行う最善の方法は、ast
モジュールを使用することです。特に、ast.get_docstring
ほとんどあなたが望むことをします。ノードではなく docstring の内容を返しますが、同じアルゴリズムを使用して docstring ノードとその場所を見つけることができます。
root = ast.parse('''
def foo():
"""the foo function"""
pass
''')
for node in ast.walk(root):
if isinstance(node, (ast.FunctionDef, ast.ClassDef, ast.Module)):
if (node.body and isinstance(node.body[0], ast.Expr) and
isinstance(node.body[0].value, ast.Str)):
print node.lineno, node.body[0].value.lineno, node.body[0].value.s
文書化されていませんが、lineno
プロパティはノードの最後の行を提供するためlineno
、親ノードの は docstring の最初の行またはその前の行になります。class
orキーワードと同じ行から始まる docstring と、次の行から始まる docstring の違いを簡単に見分ける方法はないようdef
です。特に、行継続 ( \
) 文字を考慮する場合はそうです。
于 2012-07-23T08:50:22.413 に答える