stef mientki a écrit : > 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.
If you use a global to *modify* it, you MUST declare "global X", either Python consider using a local. So for your error: at compile time, in Run(), it see that it must use a local X (because you set it) and generate ad-hoc bytecode, but when running X is not defined locally, so the error. > Now if I remove "X = X + 1" I don't get an error ??? If you remove the "X =..." statement, then the compiler dont know a-priori if its local or global, so it search X in both namespaces. > Is this a problem of the traceback procedure or the IDE, > or is Python not completely an interpreter, that reads line by line ??? Its compiled to buyte-code then interpreted from the byte-code. > > Please explain this to me. > > thanks, > Stef Mientki A+ Laurent. -- http://mail.python.org/mailman/listinfo/python-list