什么是 PEP8 的 E128:为视觉缩进而缩进不足的续行?
Posted
技术标签:
【中文标题】什么是 PEP8 的 E128:为视觉缩进而缩进不足的续行?【英文标题】:What is PEP8's E128: continuation line under-indented for visual indent? 【发布时间】:2013-03-04 08:50:44 【问题描述】:刚刚使用 Sublime Text(使用 Sublime Linter)打开了一个文件,并注意到我以前从未见过的 PEP8 格式错误。正文如下:
urlpatterns = patterns('',
url(r'^$', listing, name='investment-listing'),
)
它标记了第二个参数,即以url(...)
开头的行
我正要在 ST2 中禁用此检查,但 我想在忽略它之前知道我做错了什么。你永远不知道,如果这看起来很重要,我什至可能会改变我的方式:)
【问题讨论】:
【参考方案1】:PEP-8 recommends 如果您在第一行放置任何内容,则将行缩进到左括号,因此它应该缩进到左括号:
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。
【讨论】:
任何人都知道 Django 为什么这样做;有充分的理由吗?似乎跟 PeP-8 一样容易。 这在我见过的 Django 代码中非常普遍(而且在他们的文档中),它可以说取代 PEP-8,毕竟它说“许多项目都有自己的编码风格指南。如果发生任何冲突,此类项目特定指南优先于该项目。" @NickT 你误读了 PEP-8 - PEP-8 建议遵循给定项目使用它的现有约定 - 但在这种情况下,代码不会进入 Django,它会进入你的使用 Django 的项目 - 无需遵循他们的约定。该规则的目的是保持代码库内部的一致性。 请注意,PEP8 还指出您应该在有意义的情况下忽略 PEP8,我认为在这种情况下是有意义的。随意不同意您自己的项目。无论如何,这将很快成为一个有争议的问题,因为在 Django 1.8 中将不推荐使用patterns()
:docs.djangoproject.com/en/dev/releases/1.8/…【参考方案2】:
这也适用于这样的语句(由 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'])
【讨论】:
我更喜欢括号而不是反斜杠,第一行是return (
,然后每个可返回的项目都在自己的行上,缩进,最后是右括号在单独的行上,缩进级别与return
。 编辑: 像这样pastebin.com/fAe7558X
@MarkusMeskanen 是的,我也是。我只是想指出,即使是自动格式也不完全符合这个规范。以上是关于什么是 PEP8 的 E128:为视觉缩进而缩进不足的续行?的主要内容,如果未能解决你的问题,请参考以下文章