我正在尝试提取 Python 模块中所有文档字符串的开始和结束行号。没有正则表达式有没有一种明智的方法?
问问题
671 次
1 回答
4
最好的方法是使用ast
模块。特别是,ast.get_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
父节点的 将是文档字符串的第一行或之前的行。似乎没有一种简单的方法可以区分与class
ordef
关键字在同一行和下一行开始的文档字符串之间的区别,尤其是当您考虑行继续\
符 ( ) 时。
于 2012-07-23T08:50:22.413 回答