Unexpected python exception
Richard Purdie
rpurdie at rpsys.net
Wed Nov 11 07:37:04 EST 2009
On Wed, 2009-11-11 at 12:21 +0100, Diez B. Roggisch wrote:
> As the import-statement in a function/method-scope doesn't leak the
> imported names into the module scope, python treats them as locals.
> Which makes your code equivalent to
>
>
> x = 1000
>
> def foo():
> print x
> x = 10
Aha, thanks. This makes it clear whats happening.
> Throws the same error. The remedy is to inform python that a specific
> name belongs to global scope, using the "global"-statement.
>
> def foo():
> global x
> print x
> x = 10
>
>
> Beware though that then of course *assigning* to x is on global level.
> This shouldn't be of any difference in your case though, because of the
> import-only-once-mechanics of python.
Is there a way to make the "global x" apply to all functions without
adding it to each one?
I suspect this equates to intentionally "leaking the imported names into
the module scope"? :)
What I'm trying to do is to avoid having "import X" statements
everywhere by changing __builtin__. It seems my approach doesn't have
quite the same effect as a true import though.
Cheers,
Richard
More information about the Python-list
mailing list