PEP8: W292和W391之间的冲突

34
据我所知,在Unix中,文件末尾始终留有空行是一种良好的做法,换句话说,每一行都应该以\n结尾。
在使用PEP8检查我的Python代码时,我注意到它也指出文件末尾应该有\n
W292 no newline at end of file
    JCR: The last line should have a newline.

奇怪的是,它与W391冲突。
W391 blank line at end of file
    JCR: Trailing blank lines are superfluous.

    Okay: spam(1)
    W391: spam(1)\n

应该怎么样?文件末尾应该有空行还是没有空行?

4
你指的是哪一个PEP 8?官方页面上完全没有提到这一点。 - Tim Pietzcker
输出来自于从PYPI安装的“pep8 --show-pep8”。 - seler
@TimPietzcker 说得好,我在原始文档中也没有看到它。看起来 pep8 模块(现在是 pycodestyle)从原始文档中夺取了风格的垄断地位。 - greatvovan
4个回答

42

W391是一个空白行,即两个连续的\n。这并不会引起冲突。


1
PEP中的示例怎么样?它说末尾不应该有\n。我猜你的意思是spam(1)\n<br>\n - seler
17
看起来VIM在每个文件的末尾添加了“\n”而不实际跳到下一行。很整洁! - seler

17

这就是W391在谈论什么:

print 'last line'

根据W292,下面的代码是错误的:

print 'last line'

正确的方式应该是:

print 'last line'

哦,当我使用vim和cat展示最新版本时,与您所见相同,我在syntastic中收到了一个W391警告。然而,在第二个例子中,我并没有收到这个警告。这是syntastic的一个错误吗? - naught101
3
@naught101 Vim会在幕后自动添加最后一行的换行符。在这种情况下,Vim是在欺骗你。如果你不想要这种行为,可以使用插件来告诉Vim不要添加最后一行的换行符。 - Nick Sloan

3
在Windows中,“\n”是行之间的分隔符,但在Linux中,“\n”是任何行的结束符。Vim在Linux平台上在行末添加“\n”,这是遵循操作系统定义的标准做法,没有做错什么。

0
如果您在最后一行代码之后没有添加一个空行,就会出现W292错误,如下所示:
1 import math
2
3 print(math.pi) # The last code

W391发生在您在最后一行代码之后添加了多个空白行的情况下,如下所示:

1 import math
2
3 print(math.pi) # The last code
4
5

为了避免出现W292和W391错误,您应该在最后一行代码之后只添加一个空行,如下所示:
1 import math
2
3 print(math.pi) # The last code
4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接