不重新定义就无法从 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
我有一个模块,其中定义了一个模块 __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