¿Qué es el E128 de PEP8: línea de continuación con sangría inferior para sangría visual?

3 minutos de lectura

Acabo de abrir un archivo con Sublime Text (con Sublime Linter) y noté un error de formato PEP8 que nunca antes había visto. Aquí está el texto:

urlpatterns = patterns('',
    url(r'^$', listing, name="investment-listing"),
)

Está marcando el segundo argumento, la línea que comienza url(...)

Estaba a punto de deshabilitar esta verificación en ST2 pero quisiera saber que estoy haciendo mal antes de ignorarlo. Nunca se sabe, si parece importante, incluso podría cambiar mis formas 🙂

avatar de usuario
gareth latty

PEP-8 recomienda sangra las líneas en los paréntesis de apertura si coloca algo en la primera línea, por lo que debería estar sangrando en el paréntesis de apertura:

urlpatterns = patterns('',
                       url(r'^$', listing, name="investment-listing"))

o no poner ningún argumento en la línea de inicio, y luego sangrar a un nivel uniforme:

urlpatterns = patterns(
    '',
    url(r'^$', listing, name="investment-listing"),
)

urlpatterns = patterns(
    '', url(r'^$', listing, name="investment-listing"))

Le sugiero que lea el PEP-8: puede hojearlo mucho y es bastante fácil de entender, a diferencia de algunos de los PEP más técnicos.

  • Alguien sabe por qué Django hace esto; ¿Hay una buena razón? Parece que sería igual de fácil seguir a PeP-8.

    – el herk

    22 de marzo de 2014 a las 1:35

  • Esto es tan omnipresente en el código Django que he visto (además, está en todos sus documentos) que podría decirse que reemplaza a PEP-8, después de todo, dice “Muchos proyectos tienen sus propias pautas de estilo de codificación. En caso de conflicto, dichas guías específicas del proyecto tienen prioridad para ese proyecto.

    – Nick T.

    13 mayo 2014 a las 22:04


  • @TheHerk, la razón es probablemente que el primer argumento para patterns() es único (un prefijo para todo lo demás especificado), y todos los demás argumentos son patrones de URL que son básicamente iguales.

    – Nick T.

    13 mayo 2014 a las 22:06


  • @NickT Estás leyendo mal PEP-8: PEP-8 recomienda seguir la convención existente donde un proyecto determinado lo usa, pero en este caso el código no va a Django, va a tu proyecto usando Django, no hay necesidad para seguir su convención. El objetivo de esa regla es mantener la coherencia dentro de las bases de código.

    – Gareth Latty

    17 mayo 2014 a las 14:34

  • Tenga en cuenta que PEP8 también establece que debe ignorar PEP8 cuando tenga sentido hacerlo, y diría que en este caso tiene sentido. Siéntase libre de estar en desacuerdo para sus propios proyectos. En cualquier caso, esto pronto será un punto discutible ya que usar patterns() quedará en desuso en Django 1.8: docs.djangoproject.com/en/dev/releases/1.8/…

    –Tom Carrick

    29 de julio de 2014 a las 10:16

Esto también se aplica a declaraciones como esta (formateadas automáticamente por PyCharm):

    return combine_sample_generators(sample_generators['train']), \
           combine_sample_generators(sample_generators['dev']), \
           combine_sample_generators(sample_generators['test'])

Lo que dará la misma advertencia de estilo. Para deshacerme de él tuve que reescribirlo a:

    return \
        combine_sample_generators(sample_generators['train']), \
        combine_sample_generators(sample_generators['dev']), \
        combine_sample_generators(sample_generators['test'])

  • Prefiero los paréntesis a la barra invertida aquí, siendo la primera línea return (luego cada artículo retornable en su propia línea, con sangría, y finalmente el paréntesis de cierre en una línea separada, al mismo nivel de sangría que el return. Editar: Como esto pastebin.com/fAe7558X

    -Markus Meskanen

    27 de mayo de 2019 a las 6:27


  • @MarkusMeskanen Sí, yo también. Solo quería señalar que ni siquiera el formato automático cumple completamente con esta especificación.

    – Stefan Falk

    27 de mayo de 2019 a las 8:57


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad