Issue 6782: Scoping of variables in closures (original) (raw)

Issue6782

Created on 2009-08-25 15:29 by bitfort, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Messages (2)
msg91954 - (view) Author: victor (bitfort) Date: 2009-08-25 15:29
I can't tell if this is "feature" or a "bug" but either way this behavior struck me as strange. """ def func(): x = 5 def inc(): temp = x + 1 # when inc() is execute, this line fails x = temp return x return inc i = func() i() # will raise error """ It says that x referenced before defined (when computing x + 1). It seems that the fact that x is assigned in the local inc() that it shadows the outer x. Even stranger is that if you remove the the assignment of "x = temp" there is no error; suggesting the assignment to x anywhere in the inner function shadows the entire function. This is not the expected behavior, so I thought it may be bug.
msg91955 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2009-08-25 15:44
It's feature. In python 3 you can use the 'nonlocal' keyword to access the variable in the outer scope for assignment.
History
Date User Action Args
2022-04-11 14:56:52 admin set github: 51031
2009-08-25 16:40:27 benjamin.peterson set status: open -> closed
2009-08-25 15:44:45 r.david.murray set priority: normalnosy: + r.david.murraymessages: + resolution: not a bugstage: resolved
2009-08-25 15:29:10 bitfort create