[Tutor] Resetting the namespace
Patrick Sabin
patrick.just4fun at gmail.com
Mon Mar 8 18:15:56 CET 2010
I found this piece of code, which completely puzzles me, in the pdb
module of the trunk:
class Pdb(bdb.Bdb, cmd.Cmd):
...
def _runscript(self, filename):
# The script has to run in __main__ namespace (or imports from
# __main__ will break).
#
# So we clear up the __main__ and set several special variables
# (this gets rid of pdb's globals and cleans old variables on
# restarts).
import __main__
__main__.__dict__.clear()
__main__.__dict__.update({"__name__" : "__main__",
"__file__" : filename,
"__builtins__": __builtins__,
})
The intention of this code is to reset the namespace, before executing a
script.
When I try to do something similar, i.e. __main__.__dict__.clear(), I
loose the __builtins__ variable in the namespace, e.g.:
>>> import __main__
>>> print __builtins__
<module '__builtin__' (built-in)>
>>> __main__.__dict__.clear()
>>> print __builtins__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '__builtins__' is not defined
But for some reason the code mentioned above actually works in the case
of pdb. Any ideas why?
- Patrick
More information about the Tutor
mailing list