What is PEP8's E128: continuation line under-indented for visual indent?
刚刚用Sublime Text(Sublime Linter)打开一个文件,发现了一个我以前从未见过的PEP8格式错误。 这是文字:
1 2 3
| urlpatterns = patterns('',
url(r'^$', listing, name='investment-listing'),
) |
它标记了第二个参数,即以url(...)开头的行
我准备在ST2中禁用这个检查,但是我想知道在我忽略它之前我做错了什么。 你永远不知道,如果看起来重要我甚至可能改变我的方式:)
如果您在第一行放置任何内容,PEP-8建议您将行缩进到左括号,因此它应该缩进到左括号:
1 2
| urlpatterns = patterns('',
url(r'^$', listing, name='investment-listing')) |
或者不在起始行上放置任何参数,然后缩进到统一级别:
1 2 3 4 5 6 7
| urlpatterns = patterns(
'',
url(r'^$', listing, name='investment-listing'),
)
urlpatterns = patterns(
'', url(r'^$', listing, name='investment-listing')) |
我建议读一下PEP-8 - 它不是一个很长的文档,而且它很容易理解,不像一些技术性更强的PEP。
-
我知道了!是的,这是有道理的。我从"标准"Django的做事方式中采用了这个代码。我想如果我写这样的话,我会把第一个论点放在自己的路上。
-
@Oli是啊我可以理解将''放在第一行的本能,但它也很容易让人错过它的存在。 PEP-8中的两种风格使阅读时更难以略过一个论点。
-
任何人都知道为什么Django这样做;有充分的理由吗?似乎跟随PeP-8一样容易。
-
@TheHerk我同意,并且,正如我在上面的评论中所提到的,我认为这样做'django方式'会让人更容易错过参数。我想这只是一个人选择的风格和其他人遵循的风格。
-
这在我看过的Django代码中是无处不在的(加上它的全部文档)它可以说取代PEP-8,毕竟它说"许多项目有自己的编码风格指南。如果有任何冲突,这样的项目 - 特定指南优先于该项目。"
-
@TheHerk的基本原理可能是patterns()的第一个参数是唯一的(指定其他所有内容的前缀),而所有其他参数都是基本相同的url模式。
-
@NickT我认为,如果我没有看到这一点,并且花了一年多的时间让某人评论这个可能是原因的说法,那么,如果这是意图的话,那就不是特别明确的方式。一般来说,我仍然认为更容易错过的理由足以保证PEP-8推荐的语法。显然,如果你是为Django做贡献,请按照自己的风格,为自己的代码库,如果可以,我会避免使用它。
-
@Lattyware如果你看一下Django文档,那就是他们使用的格式。如果您在自己的项目中使用patterns(),PEP-8建议使用它们的格式,因为它是Django事实上的标准/约定。
-
@NickT你错误地阅读了PEP-8 - PEP-8建议遵循给定项目使用它的现有约定 - 但在这种情况下代码不会进入Django,它会使用Django进入你的项目 - 没有必要遵循他们的惯例。该规则的目的是在代码库内保持一致性。
-
请注意,PEP8还声明您应该忽略PEP8,这样做是有道理的,我认为在这种情况下是有意义的。随意为自己的项目不同意。无论如何,这将很快成为一个没有实际意义的点,因为在Django 1.8中将不推荐使用patterns():docs.djangoproject.com / en / dev / release / 1.8 /&shellip;
这也适用于这样的语句(由PyCharm自动格式化):
1 2 3
| return combine_sample_generators(sample_generators['train']), \
combine_sample_generators(sample_generators['dev']), \
combine_sample_generators(sample_generators['test']) |
哪个会给出相同的风格警告。 为了摆脱它,我不得不重写它:
1 2 3 4
| return \
combine_sample_generators(sample_generators['train']), \
combine_sample_generators(sample_generators['dev']), \
combine_sample_generators(sample_generators['test']) |
-
我更倾向于使用括号而不是反斜杠,第一行是return (,然后每个可返回的项目在它自己的行上,缩进,最后是一个单独的行上的结束括号,与return处于相同的缩进级别。编辑:像这样的pastebin.com/fAe7558X
-
@MarkusMeskanen是的,我也是。我只是想指出,即使是自动格式也完全符合此规范。