[issue34464] docs: keywords are special - eg constants.html

New submission from Jonathan Fine <jfine2358@gmail.com>: The identifiers True, False, None and __debug__ are keywords in the language. For example
__debug__ = __debug__ SyntaxError: assignment to keyword
1. The page constants.html incorrectly says then are in the built-in namespace. Some of them were, once. 2. The list keyword.kwlist does not contain __debug__. (Problem in Lib/keyword.py.) 3. https://docs.python.org/3/reference/datamodel.html for None, NotImplemented, etc. 4. There may be other places that need looking at. See also: https://github.com/jfine2358/py-jfine2358/blob/master/docs/none-is-special.m... Credit: The __debug__ problem arises from Steve D'Aprano's message https://mail.python.org/pipermail/python-ideas/2018-August/052917.html The std lib contains a test that this correctly raises SyntaxError: def f(*, x=lambda __debug__:0): pass ---------- assignee: docs@python components: Documentation messages: 323904 nosy: docs@python, jfine2358 priority: normal severity: normal status: open title: docs: keywords are special - eg constants.html type: enhancement versions: Python 2.7, Python 3.4, Python 3.5, Python 3.6, Python 3.7, Python 3.8 _______________________________________ Python tracker <report@bugs.python.org> <https://bugs.python.org/issue34464> _______________________________________

Jonathan Fine <jfine2358@gmail.com> added the comment: I'm happy to work on improving the text here. I'm new to contributing to Python. I'm being mentored to work on #34431. Once I'm done with that, I'll be better placed to contributed to this issue. ---------- _______________________________________ Python tracker <report@bugs.python.org> <https://bugs.python.org/issue34464> _______________________________________

R. David Murray <rdmurray@bitdance.com> added the comment: I've removed 2.7 since those constants are not keywords in 2.7 (although None and __debug__ do raise syntax errors even in 2.7, they are not keywords there). Which is almost certainly why the docs treat them inconsistently (leftovers from before they weren't keywords). We only update docs for the actively maintained versions, so I've removed everything before 3.6. I also tried to clarify the issue in the title. I don't know why you mention NotImplemented, that's not a keyword. The issue with __debug__ and keywords.py probably requires a code change, since that file is auto-generated. Please open a separate issue for that. Thanks for wanting to improve python! ---------- nosy: +r.david.murray title: docs: keywords are special - eg constants.html -> There are inconsitencies in the treatment of True, False, None, and __debug__ keywords in the docs versions: -Python 2.7, Python 3.4, Python 3.5 _______________________________________ Python tracker <report@bugs.python.org> <https://bugs.python.org/issue34464> _______________________________________

Stéphane Wirtel <stephane@wirtel.be> added the comment: Hi @David, Maybe we could remove 3.6 from the list because 3.6 is in security mode and not bugfix. Is there a security issue with this bug? ---------- nosy: +matrixise _______________________________________ Python tracker <report@bugs.python.org> <https://bugs.python.org/issue34464> _______________________________________

Serhiy Storchaka <storchaka+cpython@gmail.com> added the comment: __debug__ is not a keyword. And the error message has been changed in 3.8. But it is a special enough. You can not use this name in any assignment context:
__debug__ = 1 File "<stdin>", line 1 SyntaxError: cannot assign to __debug__ for __debug__ in []: pass ... File "<stdin>", line 1 SyntaxError: cannot assign to __debug__ with cm() as __debug__: pass ... File "<stdin>", line 1 SyntaxError: cannot assign to __debug__ class __debug__: pass ... File "<stdin>", line 1 SyntaxError: cannot assign to __debug__ def __debug__(): pass ... File "<stdin>", line 1 SyntaxError: cannot assign to __debug__ def foo(__debug__): pass ... File "<stdin>", line 1 SyntaxError: cannot assign to __debug__ import __debug__ File "<stdin>", line 1 SyntaxError: cannot assign to __debug__
You can not even assign to an attribute named __debug__!
x.__debug__ = 1 File "<stdin>", line 1 SyntaxError: cannot assign to __debug__
The assignment operator is the only exception here, and this looks like a bug. ---------- nosy: +serhiy.storchaka _______________________________________ Python tracker <report@bugs.python.org> <https://bugs.python.org/issue34464> _______________________________________

Change by R. David Murray <rdmurray@bitdance.com>: ---------- versions: -Python 3.6 _______________________________________ Python tracker <report@bugs.python.org> <https://bugs.python.org/issue34464> _______________________________________

Stéphane Wirtel <stephane@wirtel.be> added the comment: @serhiy The issue about the assigment operator is closed https://bugs.python.org/issue36052 could we close this issue? thank you ---------- _______________________________________ Python tracker <report@bugs.python.org> <https://bugs.python.org/issue34464> _______________________________________
participants (4)
-
Jonathan Fine
-
R. David Murray
-
Serhiy Storchaka
-
Stéphane Wirtel