Невозможно получить доступ к __doc__ из argparse без его переопределения - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть модуль, в котором определяется строка __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 Ответ

2 голосов
/ 23 апреля 2019

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

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

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

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

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