不重新定义就无法从argparse访问__doc__

时间:2019-04-23 10:44:47

标签: python python-2.7 argparse pylint docstring

我有一个模块,其中定义了一个模块__doc__字符串(多行),我也想在argparse用法中使用它。

所以首先我将其定义为

'''My
multiline
module
doc-string
'''

并以以下方式使用

parser = argparse.ArgumentParser(description=str(__doc__),
                                formatter_class=SmartFormatter)

(请注意:由于它不是问题的一部分,因此省略了SmartFormatter类)。

当我现在提供-h选项时,它将在文档字符串应显示的位置打印None

我可以通过如下定义文档字符串来轻松解决它:

__doc__ = '''My
multiline
module
doc-string
'''

但是随后pylint开始抱怨:

<file.py>:<line>: [W0622(redefined-builtin), ] Redefining built-in '__doc__'

现在是我的问题,如何在不重新定义__doc__的情况下访问模块文档字符串,最好是我不想忽略W0622警告。

1 个答案:

答案 0 :(得分:2)

仅当您未将多行字符串作为文件的第一条语句时,__doc__的值才是None(只能在其前面加上注释)

将字符串对象显示在正确的位置后,__doc__将不再设置为None,将其传递给argparse将起作用,无需重新输入-定义。

请注意,如果您使用-OO command-line switch运行代码,则会完全删除文档字符串。

关于禁用连接到多行字符串的pylint警告,您可以使用一对注释来禁用几行的特定警告,然后在以后重新启用它们:

# pylint: disable=W0622
__doc__ = """\
# ...
"""
# pylint: enable=W0622