Unbound Variable And Name
Solution 1:
You can refer to a name without having assigned to it:
>>> foobar
Traceback (most recent calllast):
File "<stdin>", line 1, in<module>
NameError: name 'foobar'isnot defined
Here foobar
is being referred to, but was never assigned to. This raises a NameError
because the name was never bound.
More subtly, here assignment is not happening because the line that does is never run:
>>>deffoo():...ifFalse:... spam = 'eggs'...print spam...>>>foo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in foo
UnboundLocalError: local variable 'spam' referenced before assignment
Because spam = 'eggs'
is never executed, print spam
raises an UnboudLocalError
.
Note that nowhere in Python is a name ever declared. You bind or don't bind, declaration is not part of the language.
Instead, binding is used to determine the scope of a name; binding operations include assignment, names used for a for
loop, function parameters, import statements, name to hold a caught exception in an except
clause, the name for a context manager in a with
statement all bind names.
If a name is bound in a scope (such as in a function) then it is a local name, unless you use a global
statement (or a nonlocal
statement in Python 3) to explicitly mark the name as a global (or a closure) instead.
So the following is an error:
>>>foo = None>>>defbar():...ifFalse:... foo = 'spam'...print foo...>>>bar()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in bar
UnboundLocalError: local variable 'foo' referenced before assignment
because foo
is being bound somewhere in the bar
function scope. But if you mark foo
as a global, the function works:
>>>foo = None>>>defbar():...global foo...ifFalse:... foo = 'spam'...print foo...>>>bar()
None
because now the Python compiler knows you wanted foo
to be a global instead.
This is all documented in the Naming and Binding section of the Python reference documentation.
Solution 2:
One more place is when the variable is declared in global scope and if it is used in function scope, it should specifically refer as global otherwise UnboundLocalError occurs. Following is the example:
var = 123def myfunc():
var = var + 1print varmyfunc()
Error:
UnboundLocalError: local variable 'var' referenced before assignment
Post a Comment for "Unbound Variable And Name"