Аргументы по умолчанию с использованием поддельных объектов

#mocking #python-sphinx #autodoc #default-arguments

#издевательство #python-sphinx #autodoc #аргументы по умолчанию

Вопрос:

Я использую Sphinx версии v1.8.5 для создания документации для кода Python 2 с внешними зависимостями, которые я использую autodoc_mock_imports для моделирования. Я получаю сообщение об ошибке при попытке использовать mocked object ( RAMP ) в качестве аргумента по умолчанию:

 def foo(name, amp=RAMP):
 

Ошибка гласит:

Ошибка имени: имя ‘RAMP’ не определено

Если я не использую RAMP в качестве аргумента по умолчанию, ошибка исчезает. Что я делаю не так?

Комментарии:

1. Пожалуйста, отредактируйте вопрос и явно укажите код, в котором вы определяете макет. Также покажите пример импорта RAMP и любых других его применений в модуле. Является ли значение по умолчанию в аргументе единственным местом, где возникает ошибка?

2. Да, РАМПА определена в модуле step , который импортируется без from step import * , но регулярно import step . Таким образом, установка step.RAMP в качестве значения по умолчанию решает проблему. Следовало быть более внимательным. Спасибо за ваше время!

3. Вы должны самостоятельно принять ответ, чтобы указать, что проблема была решена. Важно, чтобы участники, ищущие вопросы, знали, решены они или нет.

4. Спасибо. Я могу сделать это только через 2 дня, осталось 7 часов :).

Ответ №1:

Хорошо, итак, благодаря комментарию @bad_coder я понял, что препятствие связано с тем, как были импортированы модули. Мне нужно было разрешить область с module_defining_RAMP.RAMP помощью вместо прямого доступа RAMP .

Конечно, затем я получил уродливое значение mocked object в выходных данных моей документации:

foo(имя, amp=<sphinx.ext.autodoc.importer._MockObject объект>)

но я уже видел решение этой проблемы во время поиска своего собственного. Мне нужно было просто указать сигнатуру функции в строке документа:

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