2012-03-19 52 views
23

Por lo que sé en Unix es una buena práctica tener siempre una línea en blanco al final del archivo, o para decirlo en otras palabras: cada línea debe terminar con \n.PEP8: conflicto entre W292 y W391

Al comprobar mi código Python con PEP8 me di cuenta de que también establece que no debe haber \n al final del archivo:

W292 no newline at end of file 
    JCR: The last line should have a newline. 

Lo que es extraño, entra en conflicto con W391:

W391 blank line at end of file 
    JCR: Trailing blank lines are superfluous. 

    Okay: spam(1) 
    W391: spam(1)\n 

Cómo ¿debería ser? ¿Debo tener una línea en blanco al final del archivo o no?

+3

¿A qué PEP 8 se está refiriendo? La [página oficial] (http://www.python.org/dev/peps/pep-0008/) no menciona esto en absoluto. –

+0

la salida es de '' pep8 --show-pep8'' instalado desde PYPI. – seler

Respuesta

28

W391 es una línea en blanco , es decir, dos consecutivos \n s. No hay conflicto

+1

¿Qué pasa con el ejemplo que se muestra en pep? Dice que no debe haber '' \ n'' al final. Supongo que lo que quieres decir es '' spam (1) \ n
\ n''. – seler

+13

Parece que linke VIM agrega '' \ n'' al final de cada archivo sin pasar realmente a la línea siguiente. ¡Ordenado! – seler

13

Esto es lo W391 está hablando:

 
print 'last line' 


Esto está mal de acuerdo con W292:

 
print 'last line' 

Lo que es correcto es:

 
print 'last line' 

+0

Hrm .. cuando tengo la última versión, que se muestra como la tienes en vim, y por cat, recibo una advertencia W391 de sintastic. No recibo la advertencia cuando tengo el segundo ejemplo. ¿Es eso un error en sintáctico? – naught101

+2

@ naught101 Vim agrega la nueva línea final entre bastidores. En este caso, Vim te está engañando. Hay complementos para decirle a Vim que no agregue la nueva línea final si así lo prefiere. –

1

En Windows '\ n 'es el separador entre líneas, pero en Linux' \ n 'es el signo final en cualquier línea. Vim no se equivoca al agregar '\ n' al final de las líneas en la plataforma de linux pero siguiendo la definición de os.

Cuestiones relacionadas