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

如何让doctest兼容mkdocs中Markdown代码块内的示例?

解决mkdocstring与doctest的兼容问题

以下是几个无需手动添加空行、同时满足文档美观渲染和测试通过的最优方案:

方案1:使用reStructuredText代码块格式(推荐)

采用Python原生支持的reStructuredText代码块语法,mkdocstring会正常渲染为美观的代码块,doctest也能自动识别并跳过代码块指令,只执行测试代码:

"""
递归扁平化嵌套可迭代对象(包括字符串!),按从左到右的顺序返回所有元素。

示例:
--------
.. code-block:: python

    >>> [x for x in flatten([1,2,[3,4,[5],6],7,[8,9]])]
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
"""
  • 无需额外配置,两边需求完美兼容,没有多余空行或注释。

方案2:为Markdown代码块添加跳过注释

如果偏好Markdown风格代码块,可在代码块的首尾反引号行添加# doctest: +SKIP,让doctest跳过这些行,不影响mkdocstring渲染:

"""
递归扁平化嵌套可迭代对象(包括字符串!),按从左到右的顺序返回所有元素。

示例:
--------
```python # doctest: +SKIP
>>> [x for x in flatten([1,2,[3,4,[5],6],7,[8,9]])]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
``` # doctest: +SKIP
"""
  • 保持Markdown书写习惯,仅需两行注释即可兼容。

方案3:全局配置pytest忽略非测试行

通过pytest配置文件一次性处理所有文档字符串,无需修改代码:

在pytest.ini中添加:

[pytest]
doctest_ignore_lines = ^```, ^```$

该配置会让doctest忽略所有以```开头或结尾的行,避免将代码块标记误判为测试输出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:04:53