problem with global variable in a module

hollowspook hollowspook at gmail.com
Sat Nov 25 21:30:15 EST 2006


Thanks for all the replys.


"Diez B. Roggisch 写道:
"
> hollowspook schrieb:
> > def aa():
> >     global b
> >     b=b+1
> >     print b
> >
> > b=1
> > aa()
> >
> > The above code runs well in python shell.
> >
> > However I  have a problem as follows.
> >
> > new a file named test.py
> > ------------------------------------------------------------------------
> >
> > def aa():
> >     global b
> >     b=b+1
> >     print b
> > -------------------------------------------------------------------------
> >
> > Then in python shell,
> >
> > from test import *
> > b=1
> > aa()
> >
> > The error message is :
> > Traceback (most recent call last):
> >   File "<interactive input>", line 1, in ?
> >   File "test.py", line 3, in aa
> >     b=b+1
> > NameError: global name 'b' is not defined
> >
> > Why this happens? Please do me a favor.
>
> Because python does not know "real" globals - globals are always only
> global on a module level. Now using the "from module import *"-syntax
> asks for trouble. Because your global b above is global to the
> __main__-module, not to the module test. But the aa-function expects it
> to live in tests.
>
> To make your example work, do it as this:
>
> import test
>
> test.b = 1
> test.aa()
>
>
> See
> http://effbot.org/pyfaq/tutor-whats-the-difference-between-import-foo-and-from-foo-import.htm
> 
> Diez




More information about the Python-list mailing list