Tek bir satırda maksimum PEP8 ihlali sayısı


17

Senin görevin birçok pep8 ihlali olan bir çizgi içeren bir dosya yazmaktır .

Kurallar:

  • Pep8 sürüm 1.5.7 ve varsayılan ayarları kullanıyoruz.
  • Pep8'i diğer komut satırı seçenekleriyle çağırmaya veya özel bir rc dosyası kullanmaya izin verilmez.
  • Maksimum satır uzunluğu 120 karakter. Elbette E501'i ihlal edebilirsiniz, ancak puanınızın hesaplandığı satır <= 120 karakter olmalıdır.
  • Modülünüzden önce veya sonra başka satırlar da olabilir, ancak puanınıza yalnızca bir satır katkıda bulunur.
  • Dosyanız SyntaxErrors veya her türlü çöp içerebilir, içe aktarılması veya çalıştırılması gerekmez.

Puanlama örneği:

Aşağıdaki modülün thing.pypuanı 2'dir, çünkü 2 pep8 ihlali olan bir satır (satır 1) içerir.

 spam='potato'

Bir puanı kontrol etmek için:

~$ 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
Bu dile özgü bir zorluk mu? Çünkü bunları gerçekten sevmiyoruz.
— John Dvorak

Gerçekten dile özgü değil (çünkü dosya herhangi bir çöp içerebilir) ama açıkçası python kodlama aşina insanlar bazı avantajı olacak
— wim

Yanıtlar:


11

241

en fazla hatayı istiyorsanız, noktalı virgülle deliye dönün

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

$ cat test.py | wc -m
120

$ pep8 test.py | wc -l
241

hatanın çoğu:

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

sonunda bu hatayla:

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

@wim yayınınıza yanıt veremedi, bu yüzden buraya koydum. avantajı hakkında haklıydınız, eğer birisi yukarıda gönderdiğimden sonra daha fazla hataya neden olan başka bir şey
— bulursanız şaşırdım

Sanırım noktalı virgül kısa. wc, sondaki yeni satırı sayar, ancak bu sitedeki karakter sayıları için saymayız. Kod teklifinizde görebileceğiniz gibi, son karakteriniz # 119. Sonuncusu hariç her noktalı virgül için 240, 2, aşırı uzun çizgi için 1 ve noktalı virgülle bitirmek için 1 almalısınız.
— isaacg

@isaacg ah, haklısın, karakterin sayısından daha az hata almanın garip olduğunu düşündüm * 2, görünmez yeni satırı eklemek için
— gedit'i suçluyorum

haha, biraz ucuz .. ama etkili! +1
— wim

7

123

Evet, karakterlerden daha fazla ihlal!

$ 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

Hile bir =sonra (pep bir işlev çağrısı (örneğin foo(bar=12)) bir anahtar kelime yaptığını düşünüyorum yapar . Bu bağlamda, [TAB]=her ikisi de

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

Ve =[TAB]her ikisini de tetikler

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

Neşeyle, bunları zincirleyebilirsiniz.

Bu, karakter başına bir ihlal sayısı verir. Bunu kurmam gerekiyor (, ancak )bize vermiyor :

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

Bu 120. Newline yok = 121. "Hat çok uzun" hatasını tetiklemeyi başardı, bu yüzden 122. Son olarak, bir boşlukla başlamak için bir karakter kullanmak (teşekkürler eric_lagergren ) 1 yerine 2 ihlal veriyor:

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

Zafer!


Önde gelen bir boşluk ekleyin ve sonuncuyu kaldırın zve 103 ile sonuçlanacaksınız ... ancak bu kodu kopyaladığımda 102 yerine 83'ü alıyorum. Boşluğun dağınık olduğunu düşünüyorum.
— Eric Lagergren

@eric_lagergren: Boşluk yerine sekme kullanıyorum ve sanırım düzgün kopyalanmıyorlar. Sanırım yapıştıracak!
— Claudiu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.