首页 > 解决方案 > 使用模拟对象的默认参数

问题描述

我正在使用 Sphinx v1.8.5 为 Python 2 代码构建文档,这些代码具有我使用autodoc_mock_imports. 当我尝试使用模拟对象 ( RAMP) 作为默认参数时收到错误消息:

def foo(name, amp=RAMP):

错误说:

NameError:未定义名称“RAMP”

如果我不用RAMP作默认参数,错误就会消失。我究竟做错了什么?

标签: mockingpython-sphinxautodocdefault-arguments

解决方案


好的,感谢@bad_coder 的评论,我意识到障碍源于模块的导入方式。我需要使用module_defining_RAMP.RAMP而不是直接访问来解决范围RAMP

当然,然后我在文档的输出中得到了模拟对象的丑陋价值:

foo(name, amp=<sphinx.ext.autodoc.importer._MockObject object>)

但是我在寻找自己的解决方案时已经看到了这个问题的解决方案。我需要简单地在文档字符串中声明函数签名:

def foo(name, amp=RAMP):
"""
foo(name, amp=module_defining_RAMP.RAMP)
"""

推荐阅读