Issue 33401: exec attribute can't be set to objects in Python2 (SyntaxError) (original) (raw)

Created on 2018-05-01 20:32 by luav, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Messages (5)
msg316015 - (view) Author: (luav) Date: 2018-05-01 20:32
The following code works fine on Python 3.5.2 but `exec` attribute fails to be set to the object on Python 2.7.12: ```python >>> o = type('O', (object,), {}) >>> o.e = 1 >>> o.eval = 1 >>> o.exec = 1 File "", line 1 o.exec = 1 ^ SyntaxError: invalid syntax ``` OS Environments: Ubuntu 16.04.4 LTS x64
msg316016 - (view) Author: Anilyka Barry (abarry) * (Python triager) Date: 2018-05-01 20:34
This is because `exec` is a keyword in Python 2, whereas in Python 3 it's a function.
msg316018 - (view) Author: (luav) Date: 2018-05-01 20:58
Why Python 2 documentation does not outline that keywords / statements can't be used as the object attributes? https://docs.python.org/2/reference/simple_stmts.html#exec And why does this restriction exist at all? The keywords always stand-alone and newer follow '.', i.e. always distinguishable from the object attributes.
msg316019 - (view) Author: (luav) Date: 2018-05-01 21:04
I'm sorry for the previous question, now it's clear (the space is allowed after the '.' which complicates the parsing): ``` >>> o.e = 1 >>> o. e 1 >>> o.e 1 ``` Anyway, it would be nice to outline the eligible values for attributes in the documentation (https://docs.python.org/2/tutorial/classes.html).
msg316020 - (view) Author: Anilyka Barry (abarry) * (Python triager) Date: 2018-05-01 21:08
Any valid variable name can be used as a an attribute; for example, "spam" is valid while "spam-eggs" is not. This isn't unique to classes, but to all assignments everywhere. If we allowed `o.exec = blah` then we should also allow `exec = blah` at the global scope and that's a whole load of not happening, much less in Python 2 (which isn't getting any significant updates anymore).
History
Date User Action Args
2022-04-11 14:58:59 admin set github: 77582
2018-05-01 21:08:42 abarry set messages: +
2018-05-01 21:04:58 luav set messages: +
2018-05-01 20:58:29 luav set messages: +
2018-05-01 20:34:08 abarry set status: open -> closednosy: + abarrymessages: + resolution: not a bugstage: resolved
2018-05-01 20:32:55 luav create