[docs] [issue26363] __builtins__ propagation is misleading described in exec and eval documentation
Berker Peksag
report at bugs.python.org
Sat Aug 18 20:07:48 EDT 2018
Berker Peksag <berker.peksag at gmail.com> added the comment:
Thank you for the report, Xavier.
This is a duplicate of issue 22057.
PR 8812 clarifies the behavior when a dictionary without a "__builtins__" key is passed as *globals* to eval(). I think that makes the opposite case much easier to understand.
>>> eval("print(spam)", {'__builtins__': {'spam': 'eggs'}})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'print' is not defined
>>> eval("print(spam)", {'__builtins__': {'spam': 'eggs', 'print': print}})
eggs
Also, I never needed to pass a dictionary with a "__builtins__" key to eval() before, so I don't think it's an important detail to document.
----------
nosy: +berker.peksag
resolution: -> duplicate
stage: patch review -> resolved
status: open -> closed
superseder: -> The doc say all globals are copied on eval(), but only __builtins__ is copied
type: -> behavior
versions: +Python 3.8 -Python 3.5
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue26363>
_______________________________________
More information about the docs
mailing list