Невозможно получить доступ к __doc__ из argparse без его переопределения

#python #python-2.7 #argparse #pylint #docstring

#python #python-2.7 #argparse #pylint #строка документа

Вопрос:

У меня есть модуль, в котором a определяет __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-string без переопределения __doc__ , желательно, я не хочу игнорировать предупреждение W0622.

Ответ №1:

Значение для __doc__ будет None только в том случае, если вы не поместили эту многострочную строку в качестве первого оператора файла (перед ним могут предшествовать только комментарии).

Как только у вас появится объект string в нужном месте, он __doc__ больше не будет установлен в None , передача его в argparse будет работать и не нуждается в переопределении.

Обратите внимание, что если вы запускаете свой код с помощью -OO переключателя командной строки, строки документации полностью удаляются.

Что касается отключения предупреждений pylint, связанных с многострочной строкой, вы можете использовать пару комментариев, чтобы отключить определенные предупреждения для нескольких строк, а затем повторно включить их впоследствии:

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