summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/whatsnew/3.11.rst2
-rw-r--r--Lib/test/test_syntax.py4
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2021-08-25-23-17-32.bpo-45000.XjmyLl.rst2
-rw-r--r--Python/compile.c4
4 files changed, 12 insertions, 0 deletions
diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst
index 306385c..296b1b2 100644
--- a/Doc/whatsnew/3.11.rst
+++ b/Doc/whatsnew/3.11.rst
@@ -176,6 +176,8 @@ Other CPython Implementation Changes
support :class:`typing.SupportsComplex` and :class:`typing.SupportsBytes` protocols.
(Contributed by Mark Dickinson and Dong-hee Na in :issue:`24234`.)
+* A :exc:`SyntaxError` (instead of a :exc:`NameError`) will be raised when deleting the :const:`__debug__` constant. (Contributed by Dong-hee Na in :issue:`45000`.)
+
New Modules
===========
diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py
index 88503dc..43780ce 100644
--- a/Lib/test/test_syntax.py
+++ b/Lib/test/test_syntax.py
@@ -59,6 +59,10 @@ SyntaxError: cannot assign to __debug__
Traceback (most recent call last):
SyntaxError: cannot assign to __debug__
+>>> del __debug__
+Traceback (most recent call last):
+SyntaxError: cannot delete __debug__
+
>>> f() = 1
Traceback (most recent call last):
SyntaxError: cannot assign to function call here. Maybe you meant '==' instead of '='?
diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-08-25-23-17-32.bpo-45000.XjmyLl.rst b/Misc/NEWS.d/next/Core and Builtins/2021-08-25-23-17-32.bpo-45000.XjmyLl.rst
new file mode 100644
index 0000000..96c95cc
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2021-08-25-23-17-32.bpo-45000.XjmyLl.rst
@@ -0,0 +1,2 @@
+A :exc:`SyntaxError` is now raised when trying to delete :const:`__debug__`.
+Patch by Dong-hee Na.
diff --git a/Python/compile.c b/Python/compile.c
index e651ca5..053915e 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2343,6 +2343,10 @@ forbidden_name(struct compiler *c, identifier name, expr_context_ty ctx)
compiler_error(c, "cannot assign to __debug__");
return 1;
}
+ if (ctx == Del && _PyUnicode_EqualToASCIIString(name, "__debug__")) {
+ compiler_error(c, "cannot delete __debug__");
+ return 1;
+ }
return 0;
}