Python f 字符串:替换 newline/linebreak

Python f-string: replacing newline/linebreak

首先,抱歉:我很确定这可能是一个 "duplicate" 但我没有成功找到正确的解决方案。

我只是想替换我的 sql 代码中的所有换行符以将其记录到一行,但是 Python 的 f 字符串不支持反斜杠,因此:

# Works fine (but is useless ;))
self.logger.debug(f"Executing: {sql.replace( 'C','XXX')}")

# Results in SyntaxError: 
# f-string expression part cannot include a backslash
self.logger.debug(f"Executing: {sql.replace( '\n',' ')}")

当然有几种方法可以在 之前 f 字符串,但我真的很想将我的 "log the line" 代码放在一行中,并且没有额外的辅助变量。

(此外,我认为这是一种非常愚蠢的行为:要么你可以执行大括号内的代码,要么你不能...不是 "you can, but only without backslashes"...)

这个不是理想的解决方案,因为存在其他变量:

常规更新 mkrieger1s评论中的建议:

        self.logger.debug("Executing %s", sql.replace('\n',' '))

对我来说效果很好,但因为它根本不使用 f 弦(无论好坏 ;)),我想我可以保留这个问题。

你可以做到

newline = '\n'
self.logger.debug(f"Executing: {sql.replace( newline,' ')}")
  1. 不要使用 f-strings,尤其是日志记录
  2. 将换行符分配给一个常量并使用它,您显然不想这样做
  3. 使用其他表达换行符的版本,例如chr(10)

(Besides I think it's a quite stupid behavior: Either you can execute code within the curly brackets or you cant't...not "you can, but only without backslashes"...)

随时尝试修复它,我很确定没有添加此限制,因为 PEP 作者和功能开发人员希望它成为一个麻烦。

我找到了可能的解决方案

from os import linesep

print(f'{string_with_multiple_lines.replace(linesep, " ")}')

最佳,