diff options
| author | Victor Stinner <vstinner@python.org> | 2022-11-03 16:53:25 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-03 16:53:25 (GMT) |
| commit | a60ddd31be7ff96a8189e7483bf1eb2071d2bddf (patch) | |
| tree | 61eacd702c4ecec19d1b7a4133e2916be9c955e4 /Parser/string_parser.c | |
| parent | 916af11a976ca2faf0a8a77b0aaf71893e549cfe (diff) | |
| download | cpython-a60ddd31be7ff96a8189e7483bf1eb2071d2bddf.zip cpython-a60ddd31be7ff96a8189e7483bf1eb2071d2bddf.tar.gz cpython-a60ddd31be7ff96a8189e7483bf1eb2071d2bddf.tar.bz2 | |
gh-98401: Invalid escape sequences emits SyntaxWarning (#99011)
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.
Diffstat (limited to 'Parser/string_parser.c')
| -rw-r--r-- | Parser/string_parser.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/Parser/string_parser.c b/Parser/string_parser.c index 9bc3b08..e13272c 100644 --- a/Parser/string_parser.c +++ b/Parser/string_parser.c @@ -21,9 +21,16 @@ warn_invalid_escape_sequence(Parser *p, const char *first_invalid_escape, Token if (msg == NULL) { return -1; } - if (PyErr_WarnExplicitObject(PyExc_DeprecationWarning, msg, p->tok->filename, + PyObject *category; + if (p->feature_version >= 12) { + category = PyExc_SyntaxWarning; + } + else { + category = PyExc_DeprecationWarning; + } + if (PyErr_WarnExplicitObject(category, msg, p->tok->filename, t->lineno, NULL, NULL) < 0) { - if (PyErr_ExceptionMatches(PyExc_DeprecationWarning)) { + if (PyErr_ExceptionMatches(category)) { /* Replace the DeprecationWarning exception with a SyntaxError to get a more accurate error report */ PyErr_Clear(); |
