Python, PEP-8, línea de continuación E122 faltan sangría o están perdidos

Recibo este error pero, sin embargo, elijo sangrar, todavía lo entiendo, ¿sabes por qué?

if len(argmaxcomp) == 1: print "The complex with the greatest mean abundance is: {0}"\ .format(argmaxcomp[0]) 

En general, pep8 sugiere que prefieras paréntesis sobre las líneas de continuación .

La forma preferida de ajustar líneas largas es mediante el uso de la continuación de la línea implícita de Python entre paréntesis, corchetes y llaves. Las líneas largas se pueden dividir en varias líneas envolviendo expresiones entre paréntesis. Estos se deben usar en lugar de usar una barra invertida para la continuación de la línea.

Es decir:

 if len(argmaxcomp) == 1: print("The complex with the greatest mean abundance is: {0}" .format(argmaxcomp[0])) 

Otra opción, es usar la impresión de python 3:

 from __future__ import print_function if len(argmaxcomp) == 1: print("The complex with the greatest mean abundance is:", argmaxcomp[0]) 

Nota: print_function puede interrumpir / requerir la actualización del rest del código … en cualquier lugar donde haya usado print.

No obtuve el error anterior, pero probé los siguientes tipos, publique con error para que podamos verificar

 In [6]: argmaxcomp = [100] In [7]: if len(argmaxcomp) == 1: ...: print 'val: {0}'\ ...: .format(argmaxcomp[0]) ...: val: 100 In [8]: if len(argmaxcomp) == 1: ...: print 'val: {0}'.format(argmaxcomp[0]) ...: val: 100 In [9]: if len(argmaxcomp) == 1: ...: print 'val: {0}'.format( ...: argmaxcomp[0]) ...: val: 100 

Hay una sección en el PEP8 que dice:

La forma preferida de ajustar líneas largas es mediante el uso de la continuación de la línea implícita de Python entre paréntesis, corchetes y llaves. Las líneas largas se pueden dividir en varias líneas envolviendo expresiones entre paréntesis. Estos se deben usar en lugar de usar una barra invertida para la continuación de la línea.

Las barras invertidas pueden ser apropiadas a veces. Por ejemplo, las declaraciones largas y múltiples no pueden usar una continuación implícita, por lo que las barras invertidas son aceptables

Esto significa (aunque esto no tiene nada que ver con PEP8-E122) que debe envolverlo entre paréntesis en lugar de usar la barra invertida y luego la continuación de línea implícita (sangría) es el corchete de apertura:

 if len(argmaxcomp) == 1: print("The complex with the greatest mean abundance is: {0}" .format(argmaxcomp[0])) # ^--------- The bracket opens here 

Solo se mencionan 2 excepciones donde la barra diagonal inversa es aceptable porque los paréntesis son imposibles (porque tienen otro significado en estos contextos):

  • multi- with
  • assert s

Sin embargo, si realmente desea que la barra invertida (solo posible con python2) debería tener la misma sangría que la primera expresión:

 if len(argmaxcomp) == 1: print "The complex with the greatest mean abundance is: {0}" \ .format(argmaxcomp[0]) # ^--------- The first expression starts here 

El problema en este caso es que no hay sangrado en absoluto y, obviamente, el error se produce en la última línea. En caso de que los paréntesis no sean una opción, simplemente agregue sangría como se muestra a continuación:

 if len(argmaxcomp) == 1: print "The complex with the greatest mean abundance is: {0}" \ .format(argmaxcomp[0]) 

Cualquier cantidad de espacios funciona pero no sé cuál es el preferido.

Solo tuve un problema similar y lo resolví. Creo que el problema con el código del OP es que puede haber espacios en blanco entre las líneas de continuación. No debería haber nada más que el \ n.