Confused by Python and nested scoping (2.4.3)

Sean Givan kinsman at nbnet.nb.ca
Wed Apr 19 18:18:08 EDT 2006


Hi.  I'm new to Python, and downloaded a Windows copy a little while 
ago.  I was doing some experiments with nested functions, and ran into 
something strange.

This code:

def outer():
	val = 10
	def inner():
		print val
	inner()

outer()

..prints out the value '10', which is what I was expecting.

But this code..

def outer():
	val = 10
	def inner():
		print val
		val = 20
	inner()
	print val

outer()

..I expected to print '10', then '20', but instead got an error:

   print val
UnboundLocalError: local variable 'val' referenced before assignment.

I'm thinking this is some bug where the interpreter is getting ahead of 
itself, spotting the 'val = 20' line and warning me about something that 
doesn't need warning.  Or am I doing something wrong?

Thanks,
-Sean Givan



More information about the Python-list mailing list