You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解析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)

关键改动说明

  1. 用Publisher替代手动创建文档:docutils.core.Publisher会自动加载RST解析器所需的全部默认配置,避免手动生成文档时缺失关键属性的问题。
  2. 扩展文本转换逻辑:原函数仅处理Text和paragraph节点,现在改为递归遍历所有带children属性的节点,能覆盖标题、标记指令等更多RST元素的文本提取。
  3. 关于Sphinx扩展指令的说明:你的RST文件包含autoclass这类Sphinx专属指令,默认docutils会将其当作普通节点处理;如果需要解析这类指令生成完整API文档内容,还需结合sphinx.ext.autodoc相关模块搭建Sphinx解析环境。

内容的提问来源于stack exchange,提问作者Eastman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:13:23