¿Cómo debo formatear una URL larga en un comentario de Python y seguir siendo compatible con PEP8?


83

En un comentario de bloque, quiero hacer referencia a una URL que tiene más de 80 caracteres.

¿Cuál es la convención preferida para mostrar esta URL?

Sé que bit.ly es una opción, pero la URL en sí es descriptiva. Acortarlo y luego tener un comentario anidado que describa la URL acortada parece una mala solución.

Respuestas:


76

No rompa la 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
Estoy de acuerdo; sin embargo, PyCharm no hace que sea fácil de ignorar (sin escribir su código con feas referencias a '# noinspection LongLine' (y similares) por todas partes. Creo que el problema más grande es que el formato RST tiene la limitación de no poder tener un salto de línea (que no se muestra) dentro de la URL.

4
La respuesta no responde cómo cumplir, por lo que si tiene un linter, permanece con advertencias.
Efren

4
@jfs, por lo que la respuesta debería ser: "una larga fila es compatible con PEP8 en este caso"
Efren

2
@Efren es exactamente mi respuesta: * "¿cómo debo formatear ... y ser compatible con pep-8" * -> "no rompa la URL"
jfs

2
¡¡Acabo de descubrir control-clic !! ESO ES por lo que no quieres romper una URL en un comentario.
Bob Stein

68

De PEP8

Pero lo más importante: sepa cuándo ser inconsistente; a veces, la guía de estilo simplemente no se aplica. En caso de duda, utilice su mejor criterio. Mire otros ejemplos y decida qué se ve mejor. ¡Y no dudes en preguntar!

Dos buenas razones para romper una regla en particular:

  • Al aplicar la regla, el código sería menos legible, incluso para alguien que está acostumbrado a leer código que sigue las reglas.

Personalmente, usaría ese consejo y prefiero dejar la URL descriptiva completa en su comentario para las personas.


45

Puede usar el # noqaal final de la línea para evitar que PEP8 / Flake8 ejecute esa verificación. Esto está permitido por PEP8 a través de:

Los casos especiales no son lo suficientemente especiales como para romper las reglas.


3
Elegante. Uso pyflakes en Vim y no cometeré un cambio hasta que devuelva cero advertencias del conjunto de reglas acordado (el requisito de maccabe es más flexible en nuestro caso, pero no el límite de 80 líneas). La forma más corta de decirle a los compañeros de trabajo: no dividí multilínea porque no tiene sentido hacerlo.
Peter Host

4
Gracias @Sardathrion, debería tener más votos ya que en realidad aporta una solución práctica.
ezdazuzena

22

Yo diría que lo dejes ...

PEP20 :

Los casos especiales no son lo suficientemente especiales como para romper las reglas.

Aunque la practicidad vence a la pureza.

Es más práctico poder copiar / pegar rápidamente una URL y luego eliminar los saltos de línea al pegar en el navegador.


14

Si está usando 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

Utiliza un acortador de URL como el de Google, así que de esto:

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

usted obtiene:

http://goo.gl/93ZLQ


9
El riesgo, por supuesto, es que el acortador de enlaces desaparece y no tenemos forma de conocer el enlace. ArchiveTeam (dirigido por el liderazgo afiliado a Archive.org) tiene todo un esfuerzo dedicado a guardar acortadores de enlaces…
Ahmed Fasih

1
Y no solo eso, sino que la URL original tiene información relacionada con lo que es. Los acortadores de URL pierden esa información.
Julien Chastang

-5

Mi opcion seria:

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

3
Demasiado doloroso copiar y pegar de una manera utilizable de esta manera.
Kel Solaar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.