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.