stef mientki wrote: > hello, > > I've thought many times I finally understood the import / namespace rules, > but again I'm totally lost :-( > > This is my library file > > # Module lib_test.py > > X = 1 > > def Init(): > global X > X = 3 > print 'Init', X > > def Run (): > print X <=== UnboundLocalError: local variable > 'X' referenced before assignment > X = X + 1 > print ' Run', X > > > > And this my main program in another file: > > import lib_test > lib_test.Init() > print lib_test.X > > lib_test.Run() > print lib_test.X > > Why do I get the error ? > Printing isn't assigning anything or am I missing something. > Now if I remove "X = X + 1" I don't get an error ??? > Is this a problem of the traceback procedure or the IDE, > or is Python not completely an interpreter, that reads line by line ??? > > Please explain this to me.
This are the scoping-rules of python. A variable name on the left side of an name-binding/assignment operator (including augmented assignments, vulgo: += and brothers) will make the variable name a function-local. So x = 10 def foo(): print x x = 100 makes x a local variable to foo, which of course can't be accessed in print x Diez -- http://mail.python.org/mailman/listinfo/python-list