|
|
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.
|