PEP8的E128:连续行缩进不足以实现视觉缩进是什么?


298

刚刚用Sublime Text(使用Sublime Linter)打开了一个文件,并注意到了一个我以前从未见过的PEP8格式错误。这是文本:

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

它标记了第二个参数,即开始的行 url(...)

我本来打算在ST2中禁用此检查,但是在忽略它之前,我想知道自己在做错什么。你永远不会知道,如果它看起来很重要,我什至可以改变我的方式:)

Answers:


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
谁都知道Django为什么要这么做?有充分的理由吗?遵循PeP-8似乎很容易。
TheHerk

6
在我所见过的Django代码中,这是如此普遍(加上他们的所有文档),以至于它可以取代PEP-8,毕竟它说:“ 许多项目都有自己的编码风格准则。一旦发生冲突,此类项目专门针对该项目的指南。
尼克T

6
@TheHerk的基本原理可能是第一个参数patterns()是唯一的(其他所有指定参数的前缀),而其他所有参数都是基本相同的url模式。
尼克T

6
@NickT您误读了PEP-8-PEP-8建议遵循给定项目使用该约定的现有约定-但在这种情况下,代码不会进入Django,它将进入Django中的您的项目中-不需要遵守他们的惯例。该规则的目的是保持代码库内部的一致性。
Gareth Latty

25
请注意,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
Markus Meskanen

1
@MarkusMeskanen是的,我也是。我只是想指出,即使自动格式也不完全符合此规范。
显示名称
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.