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