pythonstringpython-3.6f-string

Multiline f-string in Python


I'm trying to write PEP-8 compliant code for a domestic project and I have a line with an f-string that is more than 80 characters long:

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

I'm trying to split it into different lines in the most Pythonic way but the only answer that actually works is an error for my linter.

Working code:

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

Output:

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

The linter thinks that I'm not respecting E122 from PEP-8, is there a way to get the string right and the code compliant?


Solution

  • From Style Guide for Python Code:

    The preferred way of wrapping long lines is by using Python's implied line continuation inside parentheses, brackets and braces.

    Given this, the following would solve your problem in a PEP-8 compliant way.

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

    Python strings will automatically concatenate when not separated by a comma, so you do not need to explicitly call join().