Что такое E128 в PEP8: строка продолжения с отступом для визуального отступа?

299

Просто открыл файл с помощью Sublime Text (с помощью Sublime Linter) и заметил ошибку форматирования PEP8, которую я никогда раньше не видел. Вот текст:

urlpatterns = patterns('',
    url(r'^$', listing, name='investment-listing'),
)

Он помечает второй аргумент, строку, которая начинается url(...)

Я собирался отключить эту проверку в ST2, но я хотел бы знать, что я делаю неправильно, прежде чем я проигнорирую это. Вы никогда не знаете, если это кажется важным, я мог бы даже изменить свои пути :)

Oli
источник

Ответы:

476

PEP-8 рекомендует использовать отступы для открывающих скобок, если вы помещаете что-либо в первую строку, поэтому он должен иметь отступ для открывающей скобки:

urlpatterns = patterns('',
                       url(r'^$', listing, name='investment-listing'))

или не ставить какие-либо аргументы в стартовой строке, а затем делать отступы до единого уровня:

urlpatterns = patterns(
    '',
    url(r'^$', listing, name='investment-listing'),
)

urlpatterns = patterns(
    '', url(r'^$', listing, name='investment-listing'))

Я предлагаю прочитать PEP-8 - вы можете пролистать многие из них, и это довольно легко понять, в отличие от некоторых более технических PEP.

Гарет Латти
источник
5
Кто-нибудь знает, почему Джанго делает это; есть ли веская причина? Кажется, было бы так же легко следовать PeP-8.
TheHerk
6
Это настолько вездесуще в коде Django, который я видел (плюс он находится во всех их документах), что он, возможно, заменяет PEP-8, после всего, что он говорит: «У многих проектов есть свои собственные рекомендации по стилю кодирования. В случае любых конфликтов такой проект -специфические руководства имеют приоритет для этого проекта. "
Ник Т
6
@TheHerk обоснование, вероятно, в том, что первый аргумент to patterns()является уникальным (префикс для всего остального указан), а все остальные аргументы являются шаблонами URL, которые в основном одинаковы.
Ник Т
6
@NickT Вы неправильно читаете PEP-8 - PEP-8 рекомендует следовать существующему соглашению, когда данный проект использует его - но в этом случае код не входит в Django, он входит в ваш проект с использованием Django - в этом нет необходимости следовать их соглашению. Целью этого правила является сохранение согласованности внутри кодовых баз.
Гарет Латти
25
Обратите внимание, что PEP8 также заявляет, что вы должны игнорировать PEP8, когда это имеет смысл, и я бы сказал, что в этом случае имеет смысл. Не стесняйтесь не соглашаться на ваши собственные проекты. В любом случае это скоро станет спорным вопросом, так как использование patterns()будет устаревшим в Django 1.8: docs.djangoproject.com/en/dev/releases/1.8/…
Том Каррик
13

Это также относится к таким утверждениям (автоматически отформатированным PyCharm):

    return combine_sample_generators(sample_generators['train']), \
           combine_sample_generators(sample_generators['dev']), \
           combine_sample_generators(sample_generators['test'])

Который даст такое же стиль-предупреждение. Чтобы избавиться от него, мне пришлось переписать его так:

    return \
        combine_sample_generators(sample_generators['train']), \
        combine_sample_generators(sample_generators['dev']), \
        combine_sample_generators(sample_generators['test'])
отображаемое имя
источник
2
Здесь я предпочитаю скобки, а не обратную косую черту: первая строка return (, затем каждый возвращаемый элемент в отдельной строке с отступом и, наконец, закрывающая скобка в отдельной строке на том же уровне отступа, что и return. Редактировать: Как это pastebin.com/fAe7558X
Маркус Месканен
1
@MarkusMeskanen Да, я тоже. Я просто хотел отметить, что даже автоформат не полностью соответствует этой спецификации.
отображаемое_имя