Issue6833
Created on 2009-09-03 11:25 by paultjuhatwork, last changed 2009-09-03 11:44 by mark.dickinson.
| File name |
Uploaded |
Description |
Edit |
Remove |
|
bug.py
|
paultjuhatwork,
2009-09-03 11:25
|
3 test cases stripped down to the bare minimum |
|
|
|
msg92199 - (view) |
Author: Paul van der Linden (paultjuhatwork) |
Date: 2009-09-03 11:25 |
|
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.
|
|
msg92201 - (view) |
Author: Mark Dickinson (mark.dickinson) |
Date: 2009-09-03 11:44 |
|
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.
|
|
| Date |
User |
Action |
Args |
| 2009-09-03 11:44:35 | mark.dickinson | set | status: open -> closed
nosy:
+ mark.dickinson messages:
+ msg92201
resolution: invalid |
| 2009-09-03 11:25:31 | paultjuhatwork | create | |
|