【问题标题】:Is line-joining unsupported by f-strings?f-strings 不支持线连接吗?
【发布时间】:2017-10-24 22:05:05
【问题描述】:

Python 3.6 中的 f-strings 是否不支持以下语法?如果我加入我的 f 字符串,则不会发生替换:

SUB_MSG = "This is the original message."

MAIN_MSG = f"This longer message is intended to contain " \
             "the sub-message here: {SUB_MSG}"

print(MAIN_MSG)

返回:

This longer message is intended to contain the sub-message here: {SUB_MSG}

如果我删除线连接:

SUB_MSG = "This is the original message."

MAIN_MSG = f"This longer message is intended to contain the sub-message here: {SUB_MSG}"

print(MAIN_MSG)

它按预期工作:

This longer message is intended to contain the sub-message here: This is the original message.

PEP 498 中,明确不支持反斜杠 f 字符串中:

转义序列

反斜杠不能出现在 f 字符串,因此您不能使用它们,例如,转义引号 在 f 字符串中:

>>> f'{\'quoted string\'}'

是否将行连接视为“在 f 字符串的表达式部分内”并因此不受支持?

【问题讨论】:

  • f-strings 的表达式部分 中不支持,其他地方也不支持。此外,只需将 f 添加到第二个字符串文字。这与其他字符串前缀的工作方式一致:len(r"\\" "\\") == 3.

标签: python string python-3.x python-3.6 f-string


【解决方案1】:

您必须将两个字符串都标记为f-strings 才能使其工作,否则第二个将被解释为普通字符串:

SUB_MSG = "This is the original message."

MAIN_MSG = f"test " \
           f"{SUB_MSG}"

print(MAIN_MSG)

好吧,在这种情况下,您也可以将第二个字符串设为 f 字符串,因为第一个字符串不包含任何要插入的内容:

MAIN_MSG = "test " \
           f"{SUB_MSG}"

请注意,这会影响所有字符串前缀,而不仅仅是 f 字符串:

a = r"\n" \
     "\n"
a   # '\\n\n'   <- only the first one was interpreted as raw string

a = b"\n" \
     "\n"   
# SyntaxError: cannot mix bytes and nonbytes literals

【讨论】:

    【解决方案2】:

    试试这个(注意续行中额外的“f”):

    SUB_MSG = "This is the original message."
    
    # f strings must be aligned to comply with PEP and pass linting
    MAIN_MSG = f"This longer message is intended to contain " \
               f"the sub-message here: {SUB_MSG}"
    
    
    print(MAIN_MSG)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-13
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多