[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}})

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>

More information about the docs mailing list