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


298

Щойно відкрив файл із Sublime Text (із Sublime Linter) і помітив помилку у форматуванні PEP8, якої я ніколи не бачив. Ось текст:

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

Позначає другий аргумент, рядок, який починається url(...)

Я збирався відключити цю перевірку в ST2, але хотів би знати, що я роблю не так, перш ніж ігнорувати її. Ніколи не знаєш, якщо це здається важливим, я можу навіть змінити свої способи :)

Відповіді:


475

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
Це є настільки всюдисущим у коді Джанго, який я бачив (плюс це є у всіх їхніх документах), що він, ймовірно, замінює PEP-8, адже він говорить: " Багато проектів мають свої власні правила кодування. У разі виникнення конфліктів такий проект - спеціальні путівники мають перевагу в цьому проекті ".
Нік Т

6
@ TheHerk, обґрунтування, ймовірно, перший аргумент до 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 Так, і я. Я просто хотів зазначити, що навіть цей автоформат повністю не відповідає цій специфікації.
displayname
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.