Qu'est-ce que la ligne E128: continuation PEP8 sous-indentée pour le retrait visuel?

299

Je viens d'ouvrir un fichier avec Sublime Text (avec Sublime Linter) et j'ai remarqué une erreur de formatage PEP8 que je n'avais jamais vue auparavant. Voici le texte:

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

Il signale le deuxième argument, la ligne qui commence url(...)

J'étais sur le point de désactiver cette vérification dans ST2 mais je voudrais savoir ce que je fais mal avant de l'ignorer. On ne sait jamais, si cela semble important, je pourrais même changer mes manières :)

Oli
la source

Réponses:

476

PEP-8 vous recommande de mettre en retrait les lignes entre les parenthèses ouvrantes si vous mettez quelque chose sur la première ligne, il doit donc soit être mis en retrait vers le support d'ouverture:

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

ou ne mettre aucun argument sur la ligne de départ, puis mettre en retrait à un niveau uniforme:

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

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

Je suggère de lire le PEP-8 - vous pouvez en parcourir une grande partie, et c'est assez facile à comprendre, contrairement à certains des PEP les plus techniques.

Gareth Latty
la source
5
Tout le monde sait pourquoi Django fait cela; y a-t-il une bonne raison? Il semble qu'il serait tout aussi facile de suivre PeP-8.
TheHerk
6
C'est tellement omniprésent dans le code Django que j'ai vu (et c'est partout dans leurs documents) qu'il remplace sans doute PEP-8, après tout, il dit: " De nombreux projets ont leurs propres directives de style de codage. En cas de conflit, un tel projet -des guides spécifiques ont la priorité pour ce projet. "
Nick T
6
@TheHerk le raisonnement est probablement que le premier argument de patterns()est unique (un préfixe pour tout le reste spécifié), et tous les autres arguments sont des modèles d'URL qui sont fondamentalement les mêmes.
Nick T
6
@NickT Vous avez mal lu PEP-8 - PEP-8 recommande de suivre la convention existante où un projet donné l'utilise - mais dans ce cas le code ne va pas dans Django, il va dans votre projet en utilisant Django - il n'y a pas besoin de suivre leur convention. Le but de cette règle est de maintenir la cohérence à l'intérieur des bases de code.
Gareth Latty
25
Notez que PEP8 indique également que vous devez ignorer PEP8 lorsque cela est logique de le faire, et je dirais que dans ce cas, cela a du sens. N'hésitez pas à être en désaccord pour vos propres projets. En tout cas, ce sera bientôt un point discutable car l'utilisation patterns()sera déconseillée dans Django 1.8: docs.djangoproject.com/en/dev/releases/1.8/…
Tom Carrick
13

Cela vaut également pour des déclarations comme celle-ci (formatées automatiquement par PyCharm):

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

Ce qui donnera le même avertissement de style. Pour m'en débarrasser, j'ai dû le réécrire à:

    return \
        combine_sample_generators(sample_generators['train']), \
        combine_sample_generators(sample_generators['dev']), \
        combine_sample_generators(sample_generators['test'])
Afficher un nom
la source
2
Je préfère fortement la parenthèse à la barre oblique inverse ici, la première ligne étant return (, puis chaque élément retournable sur sa propre ligne, en retrait, et enfin le crochet de fermeture sur une ligne distincte, au même niveau d'indentation que le return. Edit: Comme ceci pastebin.com/fAe7558X
Markus Meskanen
1
@MarkusMeskanen Oui, moi aussi. Je voulais juste souligner que même le formatage automatique n'est pas entièrement conforme à cette spécification.
displayname