Python f-strings:长字符串的缩进?

Python f-strings: indentation for long strings?

我在 Python 中面临长 f 字符串表达式的(审美)问题。例如,这个代码片段

if __name__ == '__main__': 
    x_true = 3
    x_prov = 4

    assert x_prov == x_true, f'The provided value for x, namely {x_prov}, is invalid, \
    the true value should be {x_true}!'

给出以下错误,这当然是完全可以预料的:

AssertionError: The provided value for x, namely 4, is invalid,     the true value should be 3!

错误消息中有一个不需要的缩进,但我认为它看起来非常难看。避免这种情况的一种方法是编写

if __name__ == '__main__': 
    x_true = 3
    x_prov = 4

    assert x_prov == x_true, f'The provided value for x, namely {x_prov}, is invalid, \
the true value should be {x_true}!'
    
    # Do sth else. 

然而,这对我来说也很难看,因为现在字符串的第二行与外部 '__main__' 函数具有相同的缩进。有没有办法让 AssertionError 正确显示 不必将代码缩进为外部函数?

是的,利用隐式字符串连接,您可以这样做:

if __name__ == "__main__":
    x_true = 3
    x_prov = 4

    assert x_prov == x_true, (
        f"The provided value for x, namely {x_prov}, is invalid,"
        f" the true value should be {x_true}!"
    )

有2个案例可以解决您的问题。

  • 创建一个带括号的表达式。 示例:
(f"First part of f-string"
 f"Second part of f-string")
  • 在 f-string 之后用 \ 分隔符创建一个多字符串。 示例:
f"Some_part" \
f"Another part"