OptionParser与狮身人面像有冲突吗?

Mic*_*hal 11 python optionparser python-sphinx

我正在尝试在sphinx中为我的项目编写文档,每当sphinx在我的模块中遇到OptionParser时,它就会给我:

sphinx-build: error: no such option: -b
Run Code Online (Sandbox Code Playgroud)

我认为这是不可能的,所以我写了一个简单的模块来检查:

from optparse import OptionParser

"""some comment here"""

parser = OptionParser(conflict_handler='resolve')
parser.add_option('', '--force', action='store_true', dest='force', default=False, help='gqdel will skip asking questions, and delete them all.');
parser.add_option('', '--verbose', action='store_true', dest='verbose', default=False, help='Report additional information from gqdel')

(options, args) = parser.parse_args()

"""and here"""

print "foo"
Run Code Online (Sandbox Code Playgroud)

它给了我同样的错误.我的第一个看起来像这样:

some title
==========

.. automodule:: test
   :members:
Run Code Online (Sandbox Code Playgroud)

mzj*_*zjn 17

以下是我认为的情况:

当Sphinx运行时,autodoc会导入模块,并执行模块中的顶层代码.创建一个OptionParser实例,它处理传递给sphinx-build的命令行参数和选项,其中一个是-b.您的OptionParser不允许此选项.

我会将OptionParser代码放在一个函数中,以便在导入模块时不执行它.

  • +1; `parser.parse_args()`在模块级代码中完全没有业务,而不仅仅是因为sphynx抱怨它. (2认同)

Ped*_*gan 5

这对我有用,在底部添加。

if __name__ == '__main__':

    parser = optparse.OptionParser()
Run Code Online (Sandbox Code Playgroud)