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

能否通过Sphinx抑制‘Unexpected indentation’错误或指定文件警告?

解决Sphinx引入LICENSE.txt时的缩进错误与警告抑制问题

问题背景

项目中的license.rst通过以下方式引入许可证文件:

License
=======

.. include:: ../LICENSE.txt

但LICENSE.txt的列表缩进格式不符合RST规范:

Copyright ...

... provided that the following conditions are met:
   *  Foo
      bar.
   *  Baz
      bee.
   *  Bop
      bow.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ...

触发Sphinx错误:../LICENSE.txt:7: ERROR: Unexpected indentation.,原因是include指令默认将引入的文件当作RST格式解析。

现有方案的局限

  • 使用:literal:或:code:参数可修复错误,但会将许可证内容渲染为代码块,大幅改变网站样式,需征得客户同意,流程繁琐。
  • 曾通过suppress_warnings = ["etoc.toctree"]抑制过其他警告,但该缩进错误未明确标注所属警告类型,直接添加相关内容不符合Sphinx配置规范。

可行的解决方法

1. 自定义日志过滤器抑制特定错误

在项目的conf.py中添加自定义过滤逻辑,精准屏蔽来自LICENSE.txt的缩进错误:

from sphinx.util import logging

def setup(app):
    logger = logging.getLogger('sphinx')
    def filter_license_errors(record):
        msg = record.getMessage()
        # 匹配目标错误信息与文件路径
        if 'Unexpected indentation' in msg and '../LICENSE.txt' in msg:
            return False  # 过滤该日志记录
        return True
    logger.addFilter(filter_license_errors)

该方法不会改变页面样式,也无需修改许可证文件内容。

2. 调整LICENSE.txt的缩进以符合RST规范

如果允许修改许可证文件,可将列表项的二级缩进调整为4个空格(RST标准缩进):

... provided that the following conditions are met:
   *  Foo
    bar.
   *  Baz
    bee.
   *  Bop
    bow.

此方法从根源解决错误,无需额外配置,但需确认许可证文件的修改不会引发合规问题。

3. 使用raw指令保留原格式引入(仅HTML输出适用)

若想保持原格式同时避免RST解析错误,可将include指令包裹在raw块中:

License
=======

.. raw:: html

    .. include:: ../LICENSE.txt

注意该方法仅对HTML构建有效,若需支持PDF等其他输出格式则不适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:53:18