This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: There are inconsitencies in the treatment of True, False, None, and __debug__ keywords in the docs
Type: enhancement Stage:
Components: Documentation Versions: Python 3.8, Python 3.7
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: docs@python Nosy List: docs@python, jfine2358, matrixise, r.david.murray, serhiy.storchaka
Priority: normal Keywords:

Created on 2018-08-22 19:08 by jfine2358, last changed 2022-04-11 14:59 by admin.

Messages (6)
msg323904 - (view) Author: Jonathan Fine (jfine2358) * Date: 2018-08-22 19:08
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.md

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
msg323905 - (view) Author: Jonathan Fine (jfine2358) * Date: 2018-08-22 19:10
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.
msg323907 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2018-08-22 19:51
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!
msg336091 - (view) Author: Stéphane Wirtel (matrixise) * (Python committer) Date: 2019-02-20 14:32
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?
msg336099 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2019-02-20 15:18
__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.
msg338035 - (view) Author: Stéphane Wirtel (matrixise) * (Python committer) Date: 2019-03-15 21:08
@serhiy

The issue about the assigment operator is closed https://bugs.python.org/issue36052

could we close this issue?

thank you
History
Date User Action Args
2022-04-11 14:59:05adminsetgithub: 78645
2019-03-15 21:08:19matrixisesetmessages: + msg338035
2019-02-20 17:30:00r.david.murraysetversions: - Python 3.6
2019-02-20 15:18:58serhiy.storchakasetnosy: + serhiy.storchaka
messages: + msg336099
2019-02-20 14:32:02matrixisesetnosy: + matrixise
messages: + msg336091
2018-08-22 19:51:47r.david.murraysetnosy: + 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
messages: + msg323907

versions: - Python 2.7, Python 3.4, Python 3.5
2018-08-22 19:10:55jfine2358setmessages: + msg323905
2018-08-22 19:08:50jfine2358create