New submission from Nick Coghlan: 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 ---------- messages: 175107 nosy: ncoghlan priority: normal severity: normal status: open title: Emit SyntaxWarning for code that risks UnboundLocalError versions: Python 3.4 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue16429> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com