1行のPEP8違反の最大数


17

あなたの仕事は、多くのpep8違反がある行を含むファイルを書くことです。

ルール:

  • pep8バージョン1.5.7とデフォルト設定を使用します。
  • 他のコマンドラインオプションでpep8を呼び出したり、カスタムrcファイルを使用したりすることはできません。
  • 行の最大長は120文字です。確かにE501に違反する可能性がありますが、スコアが計算される行は120文字以下でなければなりません。
  • モジュールには、前後に他の行を含めることができますが、スコアに寄与するのは1行のみです。
  • ファイルには、SyntaxErrorsまたは任意の種類のガベージを含めることができます。インポートまたは実行する必要はありません。

スコアリングの例:

次のモジュールにthing.pyは、2つのpep8違反がある行(行1)が含まれているため、スコアは2です。

 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
これは...言語固有の課題ですか?私たちはこれらが本当に好きではないからです。
ジョンドヴォルザーク14

(ファイルは、任意のゴミを含めることができるので)、私はそれが本当に言語固有のものではありませんだと思うけど、明らかにPythonのコーディングに精通人々は、いくつかの利点があります
WIM

回答:


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

あなたはセミコロンショートだと思います。wcは末尾の改行をカウントしますが、このサイトの文字カウントについてはカウントしません。コード引用でわかるように、最後の文字は#119です。240を取得する必要があります。最後のセミコロンを除く各セミコロンは2、極端に長い行は1、セミコロンで終わる場合は1です。
isaacg 14

P:ああ@isaacg、あなたは右、私は目に見えない改行を追加するためのgeditを責めることは、文字* 2の数よりも少ないエラーを得ていること、それは奇妙だったと考えられている
freeforall tousez

ハハ、ちょっと安い..しかし効果的!1
WIM

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

秘Theは、=after (が関数呼び出しでキーワードを実行していると思わせることです(例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

喜んで、これらを連鎖させることができます。

これにより、文字ごとに1つの違反カウントが与えられます。私はそれ(を設定する必要がありますが、)私たちに提供するものではありません:

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

それは120いいえそれはそれは最後に122ですので、スペース(おかげで開始する一つの文字を使用して、「行が長すぎる」エラーをトリガするために管理= 121改行だ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 ...になりますが、このコードをコピーするたびに102ではなく83になります。間隔が乱れていると思います。
エリックラガーグレン14

@eric_lagergren:スペースの代わりにタブを使用していますが、正しくコピーされていないと思います。私はそれをペーストビンします!
クラウディウ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.