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

Cannot access __doc__ from argparse without redefining it

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

所以一开始我定义为

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

并按以下方式使用

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

(注意:省略了 SmartFormatter class 因为它不是问题的一部分)。

当我现在提供 -h 选项时,它会打印 None 文档字符串所在的位置。

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

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

但是 pylint 开始抱怨:

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

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

仅当您没有将该多行字符串作为 文件的第一个语句 时,__doc__ 的值才为 None(仅评论可以在它之前)。

一旦字符串对象出现在正确的位置,__doc__ 将不再设置为 None,将它传递给 argparse 将起作用并且不需要重新定义。

请注意,如果您 运行 您的代码带有 -OO command-line switch,文档字符串将被完全删除。

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

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