在 python 脚本中收到错误“未终止的字符串文字错误”,为什么?

问题描述 投票:0回答:2

我有一个 Python 3.11 脚本,由于语法错误而失败:

values, value = [], "foo"
values.append(f"'{string(value).replace('"', '""')}'")

我不明白为什么,请解释一下。

values.append(f"'{string(value).replace('"', '""')}'")
  File "<stdin>", line 1
    values.append(f"'{string(value).replace('"', '""')}'")
                                                        ^
SyntaxError: unterminated string literal (detected at line 2)
python syntax syntax-error string-literals f-string
2个回答
2
投票

在 Python 3.12 之前,您不能在 f 字符串内嵌套引号,即使在替换字段内也是如此。

"
第一个参数中的
replace
正在终止 f 字符串文字,这意味着您想要
终止字符串的 
" 实际上正在开始一个新的字符串文字。

现在,使用

f"""..."""

 来定义文字。


从(至少)Python 开始,此限制已被取消 3.12.0.b1 ,由于

PEP 701: 在语法中对 f 字符串文字进行了形式化

Python 3.12.0b1 (main, Jun 4 2023, 16:00:02) [Clang 11.1.0 ] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> string = str >>> value = 9 >>> f"'{string(value).replace('"', '""')}'" "'9'"
    

1
投票

values.append(str(value).replace('\"', '\"\"'))

有用吗?

如果需要,您可以删除

baskclash+双引号 (\"

) 并保留 
双引号 ("
)。

© www.soinside.com 2019 - 2024. All rights reserved.