[New-bugs-announce] [issue16429] Emit SyntaxWarning for code that risks UnboundLocalError

Nick Coghlan report at bugs.python.org
Wed Nov 7 15:59:26 CET 2012

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 <report at bugs.python.org>

More information about the New-bugs-announce mailing list