首页 > 解决方案 > 无法从 argparse 访问 __doc__ 而不重新定义它

问题描述

我有一个模块,其中定义了一个模块__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 警告。

标签: pythonpython-2.7argparsepylintdocstring

解决方案


的值__doc__None当您没有将该多行字符串作为文件的第一条语句时(只有注释可以放在它前面)。

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

请注意,如果您使用-OO命令行 switch运行代码,则文档字符串将被完全删除。

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

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

推荐阅读