Как мне отформатировать длинный URL в комментарии к Python и при этом быть совместимым с PEP8?

В комментарии к блоку я хочу указать URL длиной более 80 символов.

Каково предпочтительное соглашение для отображения этого URL?

Я знаю, что bit.ly - вариант, но сам URL носит описательный характер. Сокращение его, а затем наличие вложенного комментария, описывающего сокращенный URL-адрес, кажется дурацким решением.

8 ответов

Решение

Не нарушайте URL:

# A Foolish Consistency is the Hobgoblin of Little Minds [1]
# [1]: http://www.python.org/dev/peps/pep-0008/#a-foolish-consistency-is-the-hobgoblin-of-little-minds

Из PEP8

Но самое главное: знать, когда нужно быть непоследовательным - иногда руководство по стилю просто не применяется. В случае сомнений используйте свое лучшее суждение. Посмотрите на другие примеры и решите, что выглядит лучше. И не стесняйтесь спрашивать!

Две веские причины нарушить определенное правило:

  • Применение правила сделает код менее читабельным даже для тех, кто привык читать код, соответствующий правилам.

Лично я бы воспользовался этим советом и оставил бы полный описательный URL в вашем комментарии для людей.

Вы можете использовать # noqa в конце строки, чтобы остановить PEP8/Flake8 от выполнения этой проверки. Это разрешено PEP8 через:

Особые случаи не настолько особенные, чтобы нарушать правила.

Я бы сказал, оставь это...

PEP20:

Особые случаи не настолько особенные, чтобы нарушать правила.

Хотя практичность превосходит чистоту.

Более практично иметь возможность быстро копировать / вставлять URL-адрес, а затем удалять разрывы строк при вставке в браузер.

Если вы используете flake8:

"""
long-url: http://stackru.com/questions/10739843/how-should-i-format-a-long-url-in-a-python-comment-and-still-be-pep8-compliant
"""  # noqa

Вы используете сокращение URL, как Google, так из этого:

http://www.python.org/dev/peps/pep-0008/

ты получаешь:

http://goo.gl/93ZLQ

Добавление «# noqa» работает, но если оно находится в строке документации, «# noqa» отображается в документах при сборке с помощью spinx. В этом случае вы можете создать собственный метод процесса autodoc. Смотрите этот ответ .

Вот моя адаптированная версия этого,

      from sphinx.application import Sphinx
import re

def setup(app):

    noqa_regex = re.compile('^(.*)\s\s#\snoqa.*$')

    def trim_noqa(app, what_, name, obj, options):
        for i, line in enumerate(lines):
            if noqa_regex.match(line):
                new_line = noqa_regex.sub(r'\1', line)
                lines[i] = new_line

    app.connect('autodoc-process-docstring', trim_noqa)
    return app

Мой вариант будет:

URL = ('http://stackru.com/questions/10739843/'
       'how-should-i-format-a-long-url-in-a-python-'
       'comment-and-still-be-pep8-compliant')
Другие вопросы по тегам