解析Github仓库中.rst文件时遇AttributeError问题求助
解决docutils解析RST时的AttributeError: 'Values' object has no attribute 'pep_references'
错误原因
问题出在docutils.utils.new_document默认生成的文档设置对象缺少RST解析器必需的配置属性(如pep_references),导致解析器初始化自定义配置时触发属性不存在的错误。
修正后的代码
import docutils from docutils import nodes from docutils.parsers.rst import Parser from docutils.core import Publisher from docutils.writers import null with open("data/repos/public_api_client/sdk_docs/autodoc/api_reference.rst") as f: rst_content = f.read() def rst_to_plain_text(node): text_parts = [] if isinstance(node, nodes.Text): text_parts.append(node.astext()) elif hasattr(node, 'children'): for child in node.children: text_parts.append(rst_to_plain_text(child)) return ' '.join(text_parts) # 通过Publisher初始化带完整配置的文档解析环境 publisher = Publisher(writer=null.Writer(), parser=Parser()) publisher.set_components('standalone', 'restructuredtext', 'null') publisher.process_programmatic_settings(None, None, None) publisher.set_source(source=rst_content) publisher.publish() parsed_document = publisher.document # 转换解析后的文档为纯文本 plain_text = rst_to_plain_text(parsed_document) print(plain_text)
关键改动说明
- 用Publisher替代手动创建文档:
docutils.core.Publisher会自动加载RST解析器所需的全部默认配置,避免手动生成文档时缺失关键属性的问题。 - 扩展文本转换逻辑:原函数仅处理
Text和paragraph节点,现在改为递归遍历所有带children属性的节点,能覆盖标题、标记指令等更多RST元素的文本提取。 - 关于Sphinx扩展指令的说明:你的RST文件包含
autoclass这类Sphinx专属指令,默认docutils会将其当作普通节点处理;如果需要解析这类指令生成完整API文档内容,还需结合sphinx.ext.autodoc相关模块搭建Sphinx解析环境。
内容的提问来源于stack exchange,提问作者Eastman
相关产品推荐
相关产品推荐

