classification
Title: Assignment operator allows to assign to __debug__
Type: behavior Stage: resolved
Components: Interpreter Core Versions: Python 3.8
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: matrixise Nosy List: emilyemorehouse, gvanrossum, matrixise, pablogsal, serhiy.storchaka
Priority: normal Keywords: patch

Created on 2019-02-20 15:23 by serhiy.storchaka, last changed 2019-02-21 10:12 by pablogsal. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 11957 closed pablogsal, 2019-02-20 16:53
PR 11958 merged matrixise, 2019-02-20 17:01
Messages (11)
msg336100 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2019-02-20 15:23
All ways of assigning to __debug__ are forbidden:

>>> __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__

The only exception is the assignment operator.

>>> (__debug__ := 'spam')
'spam'
>>> globals()['__debug__']
'spam'

This looks like a bug.
msg336103 - (view) Author: Stéphane Wirtel (matrixise) * (Python committer) Date: 2019-02-20 15:39
An idea for the fix? a direction where I could find the solution? ;-)
msg336104 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2019-02-20 15:41
You need to add for the target of the assignment operator the same check as for other targets.
msg336108 - (view) Author: Stéphane Wirtel (matrixise) * (Python committer) Date: 2019-02-20 16:07
ok, I will check for the assignment operator in the code.

maybe in the AST (Python-ast.c) but I think not
msg336110 - (view) Author: Stéphane Wirtel (matrixise) * (Python committer) Date: 2019-02-20 16:17
ok, I found the commit of @emily 8f59ee01be3d83d5513a9a3f654a237d77d80d9a

and will try to find the assignment operator :=
msg336112 - (view) Author: Emily Morehouse (emilyemorehouse) * (Python committer) Date: 2019-02-20 16:41
You should look in Python/ast.c. The naming convention follows some form of "named expression" (e.g. NamedExpr, ast_for_namedexpr).

I'll have more time to look later this week, but let me know if you have any questions.
msg336113 - (view) Author: Stéphane Wirtel (matrixise) * (Python committer) Date: 2019-02-20 16:44
Hi @emily

Thank you for your help.

In fact, I have started to read Python-ast.c and ast.c, they are the main files for this kind of operations.

Thank you again,
msg336115 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2019-02-20 16:50
Look at compile.c. The code for restricting other assignments is located here.
msg336119 - (view) Author: Pablo Galindo Salgado (pablogsal) * (Python committer) Date: 2019-02-20 17:01
When I started working on this I did not notice the extra comments here.
 
I will close my PR so Stéphane can do the PR.
msg336124 - (view) Author: Stéphane Wirtel (matrixise) * (Python committer) Date: 2019-02-20 17:09
Thank you Pablo, if I see you at PyCon, maybe we could drink a good beer ;-)
msg336197 - (view) Author: Pablo Galindo Salgado (pablogsal) * (Python committer) Date: 2019-02-21 10:11
New changeset 3ad91673057d410bf9f8c53df6bb8aa18c4b68ca by Pablo Galindo (Stéphane Wirtel) in branch 'master':
bpo-36052: Raise a SyntaxError when assigning a value to __debug__ with := (GH-11958)
https://github.com/python/cpython/commit/3ad91673057d410bf9f8c53df6bb8aa18c4b68ca
History
Date User Action Args
2019-02-21 10:12:23pablogsalsetstatus: open -> closed
resolution: fixed
stage: patch review -> resolved
2019-02-21 10:11:57pablogsalsetmessages: + msg336197
2019-02-20 17:09:53matrixisesetmessages: + msg336124
2019-02-20 17:01:19pablogsalsetnosy: + pablogsal
messages: + msg336119
2019-02-20 17:01:17matrixisesetpull_requests: + pull_request11985
2019-02-20 16:53:11pablogsalsetkeywords: + patch
stage: patch review
pull_requests: + pull_request11984
2019-02-20 16:50:19serhiy.storchakasetmessages: + msg336115
2019-02-20 16:47:51matrixisesetassignee: matrixise
2019-02-20 16:44:14matrixisesetmessages: + msg336113
2019-02-20 16:41:17emilyemorehousesetmessages: + msg336112
2019-02-20 16:17:01matrixisesetmessages: + msg336110
2019-02-20 16:07:01matrixisesetmessages: + msg336108
2019-02-20 15:41:40serhiy.storchakasetmessages: + msg336104
2019-02-20 15:39:07matrixisesetnosy: + matrixise
messages: + msg336103
2019-02-20 15:23:36serhiy.storchakacreate