¿Cómo puedo romper esta larga fila en Python?

¿Cómo harías para formatear una línea larga como esta? Me gustaría no tener más de 80 caracteres de ancho:

logger.info("Skipping {0} because its thumbnail was already in our system as {1}.".format(line[indexes['url']], video.title)) 

¿Es esta mi mejor opción?

 url = "Skipping {0} because its thumbnail was already in our system as {1}." logger.info(url.format(line[indexes['url']], video.title)) 

Eso es un comienzo. No es una mala práctica definir sus cadenas más largas fuera del código que las usa. Es una forma de separar datos y comportamientos. Su primera opción es unir los literales de cadena de forma implícita haciéndolos adyacentes entre sí:

 ("This is the first line of my text, " "which will be joined to a second.") 

O con continuaciones de final de línea, que es un poco más frágil, ya que esto funciona:

 "This is the first line of my text, " \ "which will be joined to a second." 

Pero esto no lo hace:

 "This is the first line of my text, " \ "which will be joined to a second." 

¿Ver la diferencia? ¿No? Pues no lo harás cuando sea tu código tampoco.

La desventaja de la unión implícita es que solo funciona con literales de cadena, no con cadenas tomadas de variables, por lo que las cosas pueden volverse un poco más peludas cuando se refactoriza. Además, solo puede interpolar el formato en la cadena combinada como un todo.

Alternativamente, puedes unirte explícitamente usando el operador de concatenación ( + ):

 ("This is the first line of my text, " + "which will be joined to a second.") 

Explicito es mejor que implícito, como dice el zen de python, pero esto crea tres cadenas en lugar de una, y usa el doble de memoria: están las dos que has escrito, más una que son las dos juntas, así que Hay que saber cuándo ignorar el zen. La ventaja es que puede aplicar el formato a cualquiera de las subcadenas por separado en cada línea, o al lote completo desde fuera del paréntesis.

Finalmente, puedes usar cadenas entre comillas triples:

 """This is the first line of my text which will be joined to a second.""" 

Este es a menudo mi favorito, aunque su comportamiento es ligeramente diferente, ya que la nueva línea y cualquier espacio en blanco inicial en las líneas subsiguientes se mostrarán en su cadena final. Puede eliminar la nueva línea con una barra invertida de escape.

 """This is the first line of my text \ which will be joined to a second.""" 

Esto tiene el mismo problema que la técnica anterior, ya que el código correcto solo difiere del código incorrecto por espacios en blanco invisibles.

Cuál es “mejor” depende de su situación particular, pero la respuesta no es simplemente estética, sino de comportamientos sutilmente diferentes.

Los literales de cadena consecutivos están unidos por el comstackdor, y las expresiones entre paréntesis se consideran una sola línea de código:

 logger.info("Skipping {0} because it's thumbnail was " "already in our system as {1}.".format(line[indexes['url']], video.title)) 

Personalmente no me gusta colgar bloques abiertos, así que lo formateo como:

 logger.info( 'Skipping {0} because its thumbnail was already in our system as {1}.' .format(line[indexes['url']], video.title) ) 

En general, no me molestaría en esforzarme demasiado para hacer que el código encaje exactamente dentro de una línea de 80 columnas. Vale la pena mantener la longitud de la línea en niveles razonables, pero el límite de 80 es algo del pasado.

Puedes usar el módulo textwrap para dividirlo en varias líneas

 import textwrap str="ABCDEFGHIJKLIMNO" print("\n".join(textwrap.wrap(str,8))) 

ABCDEFGH
IJKLIMNO

De la documentación :

ajuste de texto. envolver (texto [, ancho [, …]])
Envuelve el párrafo único en texto (una cadena) para que cada línea tenga una longitud máxima de caracteres. Devuelve una lista de líneas de salida, sin nuevas líneas finales.

Los argumentos de palabras clave opcionales corresponden a los atributos de instancia de TextWrapper , documentados a continuación. ancho predeterminado de 70 .

Consulte el método TextWrapper.wrap() para obtener detalles adicionales sobre cómo se comporta wrap ().