Values and objects

Terry Reedy tjreedy at udel.edu
Sat May 10 16:16:34 EDT 2014


On 5/10/2014 3:10 PM, Ethan Furman wrote:
> On 05/10/2014 02:32 AM, Chris Angelico wrote:
>>
>> Tell me, what may this function do in a compliant Python?
>>
>> def demo():
>>      ret = spam
>>      spam = 23
>>      return ret
>>
>> In CPython, that'll raise UnboundLocalError,

Note:
 >>> issubclass(UnboundLocalError, NameError)
True

I am not sure if adding the specificity is helpful or not.

>> because the local
>> variable 'spam' does already exist, and currently has no value (no
>> object bound to it).
>
> No, it does not exist -- or, more accurately, it does not exist *yet*
> but will.  The fact that there is a slot waiting for what will be spam
> is a cpython implementation detail.
>
> And if you don't like that argument (although it is a perfectly sound
> and correct argument), think of the module name space:
>
> ret = spam
> spam = 23
>
> will net you a simple NameError, because spam has not yet been created.

In other words, those two lines raise a NameError in either case.

-- 
Terry Jan Reedy




More information about the Python-list mailing list