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


299

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

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

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

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

Ответы:


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 Да, я тоже. Я просто хотел отметить, что даже автоформат не полностью соответствует этой спецификации.
— отображаемое_имя
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.