Cadena f multilínea en Python

Resuelto Owlzy asked hace 7 años • 5 respuestas

Estoy intentando escribir código compatible con PEP-8 para un proyecto doméstico y tengo una línea con una cadena f que tiene más de 80 caracteres:

def __str__(self):
    return f'{self.data} - {self.time},\nTags: {self.tags},\nText: {self.text}'

Estoy intentando dividirlo en diferentes líneas de la forma más pitónica , pero la única respuesta que realmente funciona es un error en mi linter.

Código de trabajo:

def __str__(self):
    return f'{self.date} - {self.time},\nTags:' + \
    f' {self.tags},\nText: {self.text}'

Producción:

2017-08-30 - 17:58:08.307055,
Tags: test tag,
Text: test text

El linter piensa que no estoy respetando el E122 de PEP-8 , ¿hay alguna manera de conseguir que la cadena sea correcta y que el código sea compatible?

Owlzy avatar Aug 30 '17 23:08 Owlzy
Aceptado

De la Guía de estilo para el código Python :

La forma preferida de ajustar líneas largas es mediante el uso de la continuación de línea implícita de Python entre paréntesis, corchetes y llaves.

Teniendo esto en cuenta, lo siguiente resolvería su problema de forma compatible con PEP-8.

return (
    f'{self.date} - {self.time}\n'
    f'Tags: {self.tags}\n'
    f'Text: {self.text}'
)

Las cadenas de Python se concatenarán automáticamente cuando no estén separadas por una coma, por lo que no es necesario llamar explícitamente a join().

noddy avatar Mar 01 '2019 18:03 noddy

creo que sería

return f'''{self.date} - {self.time},
Tags: {self.tags},
Text: {self.text}'''
Joran Beasley avatar Aug 30 '2017 16:08 Joran Beasley