Skip to content

gh-98401: Invalid escape sequences emits SyntaxWarning#99011

Merged
vstinner merged 2 commits into
python:mainfrom
vstinner:syntax_warning
Nov 3, 2022
Merged

gh-98401: Invalid escape sequences emits SyntaxWarning#99011
vstinner merged 2 commits into
python:mainfrom
vstinner:syntax_warning

Conversation

@vstinner
Copy link
Copy Markdown
Member

@vstinner vstinner commented Nov 2, 2022

A backslash-character pair that is not a valid escape sequence now generates a SyntaxWarning, instead of DeprecationWarning. For example, re.compile("\d+.\d+") now emits a SyntaxWarning ("\d" is an invalid escape sequence), use raw strings for regular expression: re.compile(r"\d+.\d+"). In a future Python version, SyntaxError will eventually be raised, instead of SyntaxWarning.

Octal escapes with value larger than 0o377 (ex: "\477"), deprecated in Python 3.11, now produce a SyntaxWarning, instead of DeprecationWarning. In a future Python version they will be eventually a SyntaxError.

codecs.escape_decode() and codecs.unicode_escape_decode() are left unchanged: they still emit DeprecationWarning.

  • The parser only emits SyntaxWarning for Python 3.12 (feature version), and still emits DeprecationWarning on older Python versions.
  • Fix SyntaxWarning by using raw strings in Tools/c-analyzer/ and wasm_build.py.

Comment thread Parser/string_parser.c Outdated
@vstinner
Copy link
Copy Markdown
Member Author

vstinner commented Nov 2, 2022

Previous attempt in 2018:

  • Commit: 6543912
  • Serhiy only changed the Python parser, not codecs: rationale
  • The new SyntaxWarning was seen in multiple projects: docutils (fixed), bottle, SymPy (bug in a docstring)
  • SyntaxWarning are only emitted once, and only when a Python file is parsed: when a cached PYC file is used, not warning is emitted
  • Serhiy reverted his change