Group: comp.lang.python


Subject: Why does __builtins__ mean different things...
From: Jean-Paul Calderone
Date: 12/20/2007 6:08:34 PM
On Thu, 20 Dec 2007 14:29:35 -0800, James Stroud <jstroud@mbi.ucla.edu> wrote: >Hello all, > >Say I have the following module > ># amodule.py >print __builtins__ ># end of module > >Then I have the following little helper script: > ># helper.py >import amodule ># end of helper script > >Now, I do this at the command line: > >python amodule.py > >And I get the following output: > ><module '__builtin__' (built-in)> > >Which is good. > >Now, I do this: > >python helper.py > >and I get the following output: > >{'IndexError': <type 'exceptions.IndexError'>, 'all;: >... [etc] > >I.e.: __builtins__ is a dict when referenced in an imported module, but >in *the exact same code*, when executed as a script, it becomes a >module! Is this a bug? > >In other words, what is the good of this? For the purposes of argument, >the bad of this is the behavior above. I'm guessing its a bug. > __builtins__ is "a CPython implementation detail". In other words, unless you are doing really funny stuff, you shouldn't use it. What you're probably looking for is the __builtin__ module (difference in spelling intentional). You have to import it explicitly. Once you do so, it behaves in a very unsurprising manner. Jean-Paul

Subject: Why does __builtins__ mean different things...
From: Terry Reedy
Date: 12/20/2007 10:22:22 PM
"James Stroud" <jstroud@mbi.ucla.edu> wrote in message news:fket7o$qr7$1@daisy.noc.ucla.edu... | But....what the heck? You mean if I drop an s I get predictable behavior | and if I don't, I get unpredictable behavior? In 3.0, the __builtin__ module will be renamed 'builtins'. The internal __builtins__ variable most likely will continue to point to it (as it does now in main modules). Its purpose is to aid sandboxing by replacing the builtin module. If you are not doing that, ignore it.