List comprehension - NameError: name '_[1]' is not defined ?
Mark Wooding
mdw at distorted.org.uk
Thu Jan 15 21:50:23 EST 2009
mario ruggier <mario.ruggier at gmail.com> writes:
> 2009-01-15 22:26:18,704 ERROR [evoque] AttributeError: 'function'
> object has no attribute 'func_globals': File "<string>", line 1, in
> <module>
Damn. So that doesn't work. :-(
> But even if inspect did have the func_globals attribute, the "open"
> builtin will not be found on __builtins__ (that is cleaned out when
> restricted=True).
Irrelevant. I wasn't trying to get at my __builtins__ but the one
attached to a function I was passed in, which has a different
environment.
You define a function (a method, actually, but it matters little). The
function's globals dictionary is attached as an attribute. You didn't
do anything special here, so the globals have the standard __builtins__
binding. It contains open.
You now run my code in a funny environment with a stripped-down
__builtins__. But that doesn't matter, because my environment contains
your function. And that function has your __builtins__ hanging off the
side of it.
... but I can't actually get there because of f_restricted. You don't
mention the fact that Python magically limits access to these attributes
if __builtins__ doesn't match the usual one, so I think you got lucky.
-- [mdw]
More information about the Python-list
mailing list