繁体   English   中英

Python f-string:替换换行符/换行符

[英]Python f-string: replacing newline/linebreak

首先,抱歉:我很确定这可能是“重复”,但我没有成功找到正确的解决方案。

我只是想替换我的 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-string之前有几种方法可以实现这一点,但我真的很想将我的“记录行”代码保留在一行中,并且没有额外的辅助变量。

(此外,我认为这是一个非常愚蠢的行为:要么您可以在大括号内执行代码,要么您不能……不是“您可以,但只能没有反斜杠”……)

由于其他变量,这不是理想的解决方案:

如何在 f-string 中使用换行符 '\\n' 来格式化 Python 3.6 中的输出?

一般更新mkrieger1s 评论中的建议:

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

对我来说很好用,但因为它根本不使用 f 字符串(因为它本身是好的或坏的 ;)),我想我可以让这个问题保持开放。

我找到了可能的解决方案

from os import linesep

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

最好的事物,

你可以这样做

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

(此外我认为这是一个非常愚蠢的行为:你可以在大括号内执行代码,或者你不能......不是“你可以,但只有没有反斜杠”......)

随意修复它,我很确定没有添加这个限制,因为PEP作者和功能开发人员希望它是一个痛苦的屁股。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM