Issue 6833: incorrect: failed local variable referenced before assignment (original) (raw)
The attached python file will give the following output, which is incorrect behavior as far as I know: " this will fail failed local variable 'in_std' referenced before assignment
this won't fail Not failed this won't fail either Not failed "
This is tested on windows with python2.6(standard msi) and on centos 5.3 with python2.6 (custom rpm), python2.4 (system rpm), freebsd with python2.5 (system package), python2.6 ("hand" compiled) and python3.0 ("hand" compiled).
The attached code is stripped down to the bare minimum and therefore won't do anything usefull.
This is not a bug. The behaviour you're seeing is described here:
http://docs.python.org/reference/executionmodel.html#naming-and-binding
"If a name binding operation occurs anywhere within a code block, all uses of the name within the block are treated as references to the current block. This can lead to errors when a name is used within a block before it is bound. This rule is subtle. Python lacks declarations and allows name binding operations to occur anywhere within a code block. The local variables of a code block can be determined by scanning the entire text of the block for name binding operations."
In the failing example, the registerdecorator function contains an assignment to in_std, so by the rules above in_std is local to the function. The 'if in_std' line therefore tries to lookup 'in_std' in the local namespace; it doesn't exist (yet), so an UnboundLocalError exception occurs.