Steve Holden wrote: > Hardly surprising. This statement is an assignment to x2, which > therefore becomes local to the function. Since no previous value has > been assigned to this local, the exception occurs.
But: In this case the assignment is never reached.... eg.. #!/usr/bin/env python def A(): print "begin A:" x1=123 x2=456 def B(): print "begin B:",x1,x2 if False: x2 = x2 + 210 # Magically disappears when this line is commented out. print "end B:",x1,x2 print "pre B:",x1,x2 B() print "end A:",x1,x2 A() # same error message... $ ./x1x2.py begin A: Pre B: 123 456 begin B: 123 Traceback (most recent call last): File "./x1x2.py", line 13, in <module> A() File "./x1x2.py", line 11, in A B() File "./x1x2.py", line 7, in B print "begin B:",x1,x2 UnboundLocalError: local variable 'x2' referenced before assignment I guess it is something to do with the scoping of duck typing. I WAS expecting that the A.x2 was visable until x2 is somehow (by assignment) made local. I guess I am learning that what you do to a variable in the middle of scope (even in an unreachable statement) effects the entire scope. Is there anyway to force x2 to be A.x2 (without declaring it to be a global.x2)? Maybe I can put it into a A.local class... The result sh/could be: begin A: pre B: 123 456 begin B: 123 456 end B: 123 666 end A: 123 666 ThanX NevilleD -- http://mail.python.org/mailman/listinfo/python-list