Message175107
The compiler is actually in a fairly good position to tell when code is at risk of triggering UnboundLocalError at runtime: specifically, in the section of the code that checks for duplicated parameter names [1]
Now, we can't emit SyntaxError here for backwards compatibility reasons (if you have an early reference that is never executed, your code is dodgy but will still run OK).
However, we should be able to emit a Syntax *Warning* when we detect an existing symbol at function scope having DEF_LOCAL applied for the first time *after* it has already been referenced in a way which doesn't create a local variable.
Something like:
SyntaxWarning: Local variable NAME bound after earlier reference (risks UnboundLocalError when function is called)
[1] http://hg.python.org/cpython/file/default/Python/symtable.c#l1002 |
|
Date |
User |
Action |
Args |
2012-11-07 14:59:26 | ncoghlan | set | recipients:
+ ncoghlan |
2012-11-07 14:59:26 | ncoghlan | set | messageid: <1352300366.42.0.384864300614.issue16429@psf.upfronthosting.co.za> |
2012-11-07 14:59:26 | ncoghlan | link | issue16429 messages |
2012-11-07 14:59:25 | ncoghlan | create | |
|