This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author ncoghlan
Recipients ncoghlan
Date 2012-11-07.14:59:25
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1352300366.42.0.384864300614.issue16429@psf.upfronthosting.co.za>
In-reply-to
Content
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
History
Date User Action Args
2012-11-07 14:59:26ncoghlansetrecipients: + ncoghlan
2012-11-07 14:59:26ncoghlansetmessageid: <1352300366.42.0.384864300614.issue16429@psf.upfronthosting.co.za>
2012-11-07 14:59:26ncoghlanlinkissue16429 messages
2012-11-07 14:59:25ncoghlancreate