单行中最多违反PEP8的次数


17

您的任务是编写一个文件,其中包含许多违反pep8的行为

规则:

  • 我们使用pep8 1.5.7版和默认设置。
  • 不允许使用其他命令行选项或使用自定义rc文件调用pep8。
  • 最大行长为120个字符。您可以违反E501,但是计算分数的行必须小于或等于120个字符。
  • 您的模块可以在前面或后面有其他行,但是只有一行会影响您的分数。
  • 您的文件可以包含SyntaxErrors或任何类型的垃圾,无需导入或运行。

评分示例:

以下模块thing.py的得分为2,因为它包含带有2个pep8违规的行(第1行)。

 spam='potato'

要检查分数:

~$ mktmpenv 
(tmp-ae3045bd2f629a8c)~/.virtualenvs/tmp-ae3045bd2f629a8c$ pip install pep8==1.5.7
(tmp-ae3045bd2f629a8c)~/.virtualenvs/tmp-ae3045bd2f629a8c$ echo -n "spam='potato'" > thing.py
(tmp-ae3045bd2f629a8c)~/.virtualenvs/tmp-ae3045bd2f629a8c$ pep8 thing.py 
thing.py:1:5: E225 missing whitespace around operator
thing.py:1:14: W292 no newline at end of file

2
这是...针对特定语言的挑战吗?因为我们真的不喜欢这些。
约翰·德沃夏克

我猜这并不是真的特定语言(因为文件可以包含任何垃圾),但显然熟悉python编码的人将具有一些优势
wim 2014年

Answers:


11

241

如果您想得到最大的错误,那就用分号来疯狂

$ cat test.py
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

$ cat test.py | wc -m
120

$ pep8 test.py | wc -l
241

大多数错误是:

test.py:1:119: E231 missing whitespace after ';'
test.py:1:119: E702 multiple statements on one line (semicolon)

最后有这些错误:

test.py:1:120: E703 statement ends with a semicolon
test.py:1:121: W292 no newline at end of file

@wim无法回复您的帖子,所以我就把它放在这里。您对优势是正确的,如果有人发现导致其他错误的其他错误,然后我在上面发布了,我感到很惊讶
freeforall tousez 2014年

我认为您是分号的简称。wc会计算结尾的换行符,但在此站点上,我们不会将其算在内。正如您在代码引号中看到的那样,您的最后一个字符是#119。您应该得到240,除最后一个分号外,每个分号为2,对于长行来说为1,以分号结尾为1。
isaacg 2014年

@isaacg啊,您是对的,我认为它得到的错误少于字符数* 2,这很奇怪,我怪怪gedit添加了不可见的换行符:P
freeforall tousez 2014年

哈哈,有点便宜..但是有效!+1
2014年

7

123

是的,违规超过字符!

$ curl -s http://pastebin.com/raw.php?i=RwLJfa0Q | cat
 (  =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
$ curl -s http://pastebin.com/raw.php?i=RwLJfa0Q | wc -m
 120
$ curl -s http://pastebin.com/raw.php?i=RwLJfa0Q | pep8 - | wc -l
 123

诀窍是,=一个(使人兴奋的提示使您认为您正在函数调用中使用关键字(例如foo(bar=12))。在这种情况下,同时[TAB]=触发

killpep.py:1:3: E223 tab before operator
killpep.py:1:3: E251 unexpected spaces around keyword / parameter equals

并同时=[TAB]触发

killpep.py:1:5: E224 tab after operator
killpep.py:1:5: E251 unexpected spaces around keyword / parameter equals

足够高兴地,您可以将它们链接起来。

这样得出每个字符一个违规计数。我需要(设置它,但不提供)给我们的:

killpep.py:2:1: E901 TokenError: EOF in multi-line statement

那是120。没有换行符=121。它成功触发了“行太长”错误,所以是122。最后,使用一个字符以空格开头(感谢eric_lagergren)给出了2次违规,而不是1次:

killpep.py:1:2: E111 indentation is not a multiple of four
killpep.py:1:2: E113 unexpected indentation

胜利!


添加一个前导空格并删除最后一个空格,z您将得到103 ...但是每当我复制此代码时,我得到的是83而不是102。我认为间距变得混乱了。
埃里克·拉格格伦

@eric_lagergren:我使用的是制表符而不是空格,我想它们没有正确复制。我想会贴上它!
Claudiu 2014年
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.