[Python-Dev] more timely detection of unbound locals

Terry Reedy tjreedy at udel.edu
Mon May 9 18:59:29 CEST 2011


On 5/9/2011 9:27 AM, Stefan Behnel wrote:
> Eli Bendersky, 09.05.2011 14:56:
>> It's a known Python gotcha (*) that the following code:
>>
>> x = 5
>> def foo():
>> print(x)
>> x = 1
>> print(x)
>> foo()
>>
>> Will throw:
>>
>> UnboundLocalError: local variable 'x' referenced before assignment
>>
>> On the usage of 'x' in the *first* print. Recently, while reading the
>> zillionth question on StackOverflow on some variation of this case, I
>> started thinking whether this behavior is desired or just an
>> implementation
>> artifact.
>
> Well, basically any compiler these days can detect that a variable is
> being used before assignment, or at least that this is possibly the
> case, depending on prior branching.
>
> ISTM that your suggestion is to let x refer to the outer x up to the
> assignment and to the inner x from that point on. IMHO, that's much
> worse than the current behaviour and potentially impractical due to
> conditional assignments.
>
> However, it's also a semantic change to reject code with unbound locals
> at compile time, as the specific code in question may actually be
> unreachable at runtime. This makes me think that it would be best to
> discuss this on the python-ideas list first.
>
> If nothing else, I'd like to see a discussion on this behaviour being an
> implementation detail of CPython or a feature of the Python language.
>
> Stefan
>


-- 
Terry Jan Reedy



More information about the Python-Dev mailing list