Исключение при использовании Sphinx для документирования скрипта с аргументами командной строки

Есть ли способ использовать Sphinx для документирования входных данных командной строки скрипта Python? Я могу документировать ввод функций или методов, но я не знаю, как документировать ввод скриптов. Я пытался следовать тому же синтаксису, который я использую для функций, добавляя в исходный файл строку .. automodule:: scriptLDOnServer, где scriptLDOnServer — это мой скрипт Python (который соответствует моему основному).

Проблема в том, что я получаю такую ​​ошибку:

__import__(self.modname)
File "/home/ubuntu/SVNBioinfo/trunk/Code/LD/scriptLDOnServer.py", line 10, in <module>
    genotype_filename=sys.argv[7];
IndexError: list index out of range

Кажется, что Sphinx пытается получить входные данные командной строки, но в моем исходном файле нет входных данных, поэтому импорт не удается. Есть ли способ решить эту проблему? Должен ли я использовать другую команду в исходном коде для скрипта вместо модуля?

Извините за не очень ясность, но трудно объяснить проблему.


person Rossella    schedule 08.05.2012    source источник


Ответы (1)


При импорте файла происходит сбой, поскольку вы пытаетесь получить доступ к sys.argv[7] во время импорта. Это не то, чем вы должны заниматься. Такой код, который может дать сбой, должен быть либо в блоке if __name__ == '__main__':, либо в функции, чтобы он не выполнялся при импорте кода.

Это справедливо в целом. Вы никогда не должны* писать код, который не удастся импортировать или который имеет какие-либо побочные эффекты импорта.

* Применяются условия. Но прежде чем нарушать это правило, нужно иметь достаточно веские основания.

person Chris Morgan    schedule 08.05.2012
comment
Спасибо за ваш ответ, я не знал, что основная функция должна быть заключена в эти теги - person Rossella; 08.05.2012
comment
Другая ситуация, демонстрирующая, почему импорт должен быть безопасным, это help('modules'); он идет и находит все, что можно импортировать, и импортирует это. Если у вас есть что-то, что вызывает сбой или вылет (некоторые так делают - это универсальная ошибка), это ломает его. - person Chris Morgan; 08.05.2012
comment
Как я могу прокомментировать входные параметры для модуля, я пытался использовать тот же синтаксис, что и для функций (: имя_параметра_параметра :), но, похоже, он не распознает его для входных параметров модуля (argv). Каков наилучший способ документирования этих параметров? - person Rossella; 09.05.2012
comment
@Rossella: ваш модуль не должен зависеть от sys.argv, если только он не является точкой входа. Если это так, используйте разметку программы командной строки. . - person Chris Morgan; 09.05.2012
comment
это точка входа, это именно то, что я искал, большое спасибо - person Rossella; 10.05.2012