Jak sformatować długi adres URL w komentarzu Pythona i zachować zgodność z PEP8


85

W komentarzu blokowym chcę odwołać się do adresu URL, który ma ponad 80 znaków.

Jaka jest preferowana konwencja wyświetlania tego adresu URL?

Wiem, że bit.ly jest opcją, ale sam adres URL jest opisowy. Skrócenie go, a następnie zagnieżdżony komentarz opisujący skrócony adres URL wydaje się kiepskim rozwiązaniem.

Odpowiedzi:


77

Nie niszcz adresu URL:

# A Foolish Consistency is the Hobgoblin of Little Minds [1]
# [1]: http://www.python.org/dev/peps/pep-0008/#a-foolish-consistency-is-the-hobgoblin-of-little-minds

5
Zgadzam się; Jednak PyCharm nie ułatwia zignorowania (bez literowania kodu za pomocą brzydkich odwołań '# noinspection LongLine' (i podobnych) w każdym miejscu. Myślę, że większym problemem jest to, że format RST ma ograniczenie polegające na tym, że nie jest w stanie mają podział wiersza (który nie jest wyświetlany) w adresie URL.

4
Odpowiedź nie odpowiada, jak być zgodnym, więc jeśli masz linter, pozostaje z ostrzeżeniami.
Efren

4
@jfs, więc odpowiedź powinna naprawdę brzmieć: „w tym przypadku długa linia jest zgodna z PEP8”
Efren,

2
@Efren to jest dokładnie moja odpowiedź: * „jak sformatować .. i zachować zgodność z pep-8” * -> „nie łamać
adresu

2
Właśnie odkryłem klawisz Ctrl + klik ! TO właśnie dlatego nie chcesz przerywać adresu URL w komentarzu.
Bob Stein

69

Z PEP8

Ale co najważniejsze: wiedz, kiedy być niekonsekwentnym - czasami przewodnik po stylu po prostu nie ma zastosowania. W razie wątpliwości kieruj się najlepszą oceną. Spójrz na inne przykłady i zdecyduj, co wygląda najlepiej. I nie wahaj się zapytać!

Dwa dobre powody, aby złamać określoną zasadę:

  • Zastosowanie reguły sprawi, że kod będzie mniej czytelny, nawet dla kogoś, kto jest przyzwyczajony do czytania kodu zgodnego z regułami.

Osobiście skorzystałbym z tej rady i raczej zostawiłbym w komentarzu pełny opisowy adres URL dla ludzi.


46

Możesz użyć # noqana końcu linii, aby powstrzymać PEP8 / Flake8 przed uruchomieniem tego testu. Jest to dozwolone przez PEP8 poprzez:

Specjalne przypadki nie są na tyle wyjątkowe, aby łamać zasady.


3
Elegancki. Używam pyflakes w Vimie i nie dokonam zmiany, dopóki nie zwróci zerowych ostrzeżeń z uzgodnionego zestawu reguł (wymóg maccabe jest w naszym przypadku luźniejszy, ale nie dotyczy limitu 80 linii). Najkrótszy sposób, aby powiedzieć współpracownikom: nie podzieliłem multilinii, ponieważ nie ma to sensu.
Peter Host,

4
Dzięki @Sardathrion, powinno mieć więcej głosów, ponieważ faktycznie wnosi praktyczne rozwiązanie.
ezdazuzena

22

Powiedziałbym zostaw to ...

PEP20 :

Specjalne przypadki nie są na tyle wyjątkowe, aby łamać zasady.

Chociaż praktyczność przewyższa czystość.

Bardziej praktyczna jest możliwość szybkiego kopiowania / wklejania adresu URL, a następnie usuwania podziałów wierszy podczas wklejania do przeglądarki.


15

Jeśli używasz flake8:

"""
long-url: http://stackoverflow.com/questions/10739843/how-should-i-format-a-long-url-in-a-python-comment-and-still-be-pep8-compliant
"""  # noqa

-2

Używasz skracacza adresów URL, takiego jak Google, więc z tego:

http://www.python.org/dev/peps/pep-0008/#a-foolish-consistency-is-the-hobgoblin-of-little-minds

dostajesz:

http://goo.gl/93ZLQ


9
Ryzyko jest oczywiście takie, że skracacz linków znika i nie mamy możliwości poznania linku. ArchiveTeam (prowadzony przez kierownictwo stowarzyszone z Archive.org) dokłada wszelkich starań, aby oszczędzać narzędzia do skracania linków…
Ahmed Fasih

1
I nie tylko to, ale oryginalny adres URL zawiera informacje dotyczące tego, co to jest. Skracacze adresów URL tracą te informacje.
Julien Chastang

-5

Moją opcją byłoby:

URL = ('http://stackoverflow.com/questions/10739843/'
       'how-should-i-format-a-long-url-in-a-python-'
       'comment-and-still-be-pep8-compliant')

3
Zbyt bolesne, aby w ten sposób skopiować wklejony sposób.
Kel Solaar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.