Why is the use of an undefined name not a syntax error?

Ben Bacarisse ben.usenet at bsb.me.uk
Sun Apr 1 19:32:46 EDT 2018


David Foster <davidfstr at gmail.com> writes:

> My understanding is that the Python interpreter already has enough
> information when bytecode-compiling a .py file to determine which
> names correspond to local variables in functions. That suggests it has
> enough information to identify all valid names in a .py file and in
> particular to identify which names are not valid.
>
> If broken name references were detected at compile time, it would
> eliminate a huge class of errors before running the program: missing
> imports, call of misspelled top-level function, reference to
> misspelled local variable.

I'm not sure what you mean by "valid name" and "broken name references".
The usual error is about unbound names, and binding happens at run-time.
Consider this rather contrived example:

def g(a):
    if f1(a):
        x = a
    else:
        y = 2*a
    return x+1 if f2(a) else y+1

('a' is there only to prevent some obvious optimisations.)

Are there any broken name references here?  You might get an
UnboundLocalError, though that depends on what f1 and f2 return.

<snip>
-- 
Ben.


More information about the Python-list mailing list