IDLE being too clever checking nonlocal declarations?

Chris Angelico rosuav at gmail.com
Mon Oct 21 11:06:00 EDT 2013


Try typing this into IDLE:

>>> def a():
    def b():
        nonlocal q
SyntaxError: no binding for nonlocal 'q' found


In interactive command-line Python, this doesn't throw an error, and
it works fine if the name is used later:

>>> def a():
    def b():
        nonlocal q
        q+=1
    q=1
    b()
    return q

>>> a()
2

But typing this into IDLE interactive mode requires some fiddling
around with the editor. Is it trying to be too clever? Am I doing
something that makes no sense?

Tested with 3.3.0 on Windows XP.

ChrisA



More information about the Python-list mailing list