Python3.12 三引号字符串 `\d` 上的语法警告必须是 `\\d`

Mor*_*enB 4 python warnings quoting python-3.12

更新到 Python 3.12 后,我收到有关某些三引号注释中的无效转义序列的警告。

这是新的限制吗?我习惯使用三引号字符串来记录代码,但这在 Python 3.12 之前从来都不是问题。

python3 --version
Python 3.12.0
$ ./some_script.py
/some_script.py:123: SyntaxWarning: invalid escape sequence '\d'
  """
Run Code Online (Sandbox Code Playgroud)

我尝试用以下内容替换所有行\d

20230808122708.445|INFO|C:\dist\work\trk-fullstack-test\namespaces.py

\\d

20230808122708.445|INFO|C:\\dist\work\trk-fullstack-test\namespaces.py

警告消失。

抑制警告似乎不起作用:

import warnings
warnings.filterwarnings('ignore', category=SyntaxWarning)
Run Code Online (Sandbox Code Playgroud)

有关如何正确执行此操作的任何指示?我希望我不必转义代码中三引号中记录的所有 Windows 路径。

Bri*_*ian 8

自 Python 3.6 起,不推荐在字符串文字中使用无效转义序列。从那时起,尝试使用无效的转义序列就会发出DeprecationWarning. 如果您从未在启用警告的情况下运行 Python,这一点通常会被忽视。DeprecationWarnings默认情况下是静音的。

Python 3.12DeprecationWarning. SyntaxWarningSyntaxWarning编译器在解析代码时发出,而不是在运行时发出,因此不能使用运行时警告过滤器忽略它们。与 不同DeprecationWarningsSyntaxWarnings默认显示,这就是您现在看到它的原因。这种可见度的增加是有意为之的。在 Python 的未来版本中,计划在字符串文字中使用无效转义序列最终成为硬性SyntaxError.

显而易见的解决方案是使用注释代替字符串文字。与字符串文字不同,注释不需要在语法上有效。请参阅 Python 注释中的讨论:# 与字符串,了解为什么不推荐使用字符串文字作为注释的更多信息。

要解决此警告,您可以将字符串文字设置为原始字符串文字 r"..."。原始字符串文字不处理转义序列。例如,r"\n"被简单地视为字符\n不是换行符转义序列。