summaryrefslogtreecommitdiffstats
path: root/Parser/string_parser.c
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-11-03 16:53:25 (GMT)
committerGitHub <noreply@github.com>2022-11-03 16:53:25 (GMT)
commita60ddd31be7ff96a8189e7483bf1eb2071d2bddf (patch)
tree61eacd702c4ecec19d1b7a4133e2916be9c955e4 /Parser/string_parser.c
parent916af11a976ca2faf0a8a77b0aaf71893e549cfe (diff)
downloadcpython-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.c11
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();