Entiendo que la mejor práctica actual para la continuación de línea es usar la continuación implícita entre paréntesis. Por ejemplo:
a = (1 + 2 + 3 + 4)De PEP8 ( https://www.python.org/dev/peps/pep-0008/ ):
La forma preferida de envolver líneas largas es usando la continuación de línea implícita de Python dentro de paréntesis, corchetes y llaves. Las líneas largas se pueden dividir en varias líneas colocando expresiones entre paréntesis. Estos deben usarse en lugar de usar una barra invertida para la continuación de la línea.
Tengo la intención de seguir esta convención en el futuro, sin embargo, mi pregunta se refiere a qué tan preocupado debería estar por los errores en el código existente que continúa las líneas con una barra invertida:
a = 1 + 2 \ + 3 + 4Los documentos de Python ( https://docs.python.org/2.7/howto/doanddont.html#using-backslash-to-continue-statements ) advierten que un espacio extraviado al final de una línea después de la barra invertida puede hacer que el código "sutilmente incorrecto", sin embargo, como se señala en esta pregunta ( ¿Cómo puede ser sutilmente incorrecto usar la continuación de línea de barra invertida de Python? ), el ejemplo dado simplemente da como resultado que se genere un SyntaxError, que no es un problema sutil, ya que se identifica fácilmente. Entonces, mi pregunta es, ¿existen casos en los que continuar una línea con una barra invertida cause algo peor que un error de análisis? Estoy interesado en ejemplos en los que un error en las continuaciones de barra invertida produce una excepción de tiempo de ejecución o, peor aún, un código que se ejecuta en silencio pero con un comportamiento no deseado.
"Sutilmente incorrecto" es subjetivo; cada uno tiene su propia tolerancia a la sutileza.
Un ejemplo citado a menudo de continuación de línea posiblemente dañina, independientemente de \ está separado o implícito, es la continuación de cadenas en una estructura de contenedor:
available_resources = [ "color monitor", "big disk", "Cray" "on-line drawing routines", "mouse", "keyboard", "power cables", ] ¿Los recursos disponibles incluyen una supercomputadora Cray o Crayon-line drawing routines ? (Este ejemplo es del libro "Expert C Programming", adaptado para Python aquí).
Este bloque de código no es ambiguo, pero su apariencia visual creada por la continuación + sangría puede ser engañosa y puede causar un error humano en la comprensión.
Un caso en el que puedo pensar es cuando el programador olvida un \ . Esto es especialmente probable cuando alguien viene y agrega valores en una fecha posterior. Aunque este ejemplo todavía es algo artificial porque las líneas de continuación deben tener el mismo nivel de sangría (de lo contrario, fallaría con un error de sangría).
Ejemplo:
a = 1 \ + 2 \ + 3 assert a == 6Más tarde, alguien agrega una línea:
a = 1 \ + 2 \ + 3 # Whoops, forgot to add \ ! + 4 assert a == 10 # NopeCreo que como @ 0x5453, si agrega incorrectamente una barra invertida a su código.
Esta barra invertida hace que el comentario se concatene con a.
a = "Some text. " \ """Here are some multiline comments that will be added to a"""