我有一个 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 3.12 之前,您不能在 f 字符串内嵌套引号,即使在替换字段内也是如此。
"
第一个参数中的 replace
正在终止 f 字符串文字,这意味着您想要终止字符串的
"
实际上正在开始一个新的字符串文字。
现在,使用 f"""..."""
来定义文字。
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'"
values.append(str(value).replace('\"', '\"\"'))
有用吗?如果需要,您可以删除
baskclash+双引号 (\"
) 并保留双引号 (
"
)。