如何在python中拆分长f字符串?

sur*_*190 12 python string python-3.x f-string

我得到了一个line too longpep8 E501问题.

f'Leave Request created successfully. Approvers sent the request for approval: {leave_approver_list}'
Run Code Online (Sandbox Code Playgroud)

我尝试使用多行字符串,但这带来了一个\n,这打破了我的测试:

f'''Leave Request created successfully.
Approvers sent the request for approval: {leave_approver_list}'''
Run Code Online (Sandbox Code Playgroud)

如何保持单线并通​​过pep8linting

jua*_*aga 15

使用括号和字符串文字串联:

msg = (
         f'Leave Request created successfully. '
         f'Approvers sent the request for approval: {leave_approver_list}'
)
Run Code Online (Sandbox Code Playgroud)

注意,第一个文字不需要f,但我包含它是为了一致性/可读性.

  • @AidanH 为什么“不应该”?这没有什么区别,所以这取决于风格的选择。我更喜欢这里的“f”,所以它们排成一行。不过,我可以理解为什么人们会有不同的感觉。我实际上在答案中“注意到”了这一点。 (11认同)
  • 补充一点:[_"包装长行的首选方法是在括号、方括号和大括号内使用 Python 的隐含行延续。通过将表达式包装在括号中,可以将长行分成多行。这些应该优先用于使用反斜杠继续行。"_](https://www.python.org/dev/peps/pep-0008/#maximum-line-length) (6认同)
  • 如果你有一个没有实际插值的 f 字符串,一些工具会抱怨(我认为 pylint 或 mypy 会这样做)。您可能需要告诉该工具不要抱怨该行。 (2认同)

cs9*_*s95 12

除非您将字符串括在括号内,否则您将需要换行符。在这种情况下,f将需要添加到第二行:

'Leave Request created successfully.'\ 
f'Approvers sent the request for approval: {leave_approver_list}'
Run Code Online (Sandbox Code Playgroud)

这是一个小演示:

In [97]: a = 123

In [98]: 'foo_'\
    ...: f'bar_{a}'
Out[98]: 'foo_bar_123'
Run Code Online (Sandbox Code Playgroud)

我推荐 juanpa 的答案,因为它更干净,但这是一种方法。

  • “但是 f 需要在第二行前面加上” - 为什么? (2认同)
  • @Chris_Rands 否则,第二行将被视为文字字符串,并且不会替换该变量。 (2认同)