IDLE being too clever checking nonlocal declarations?

Peter Otten __peter__ at web.de
Mon Oct 21 12:09:08 EDT 2013


Chris Angelico wrote:

> 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?

Yes, but you should still file a bug report ;)
 
> Tested with 3.3.0 on Windows XP.

Confirmed on Linux for 3.2.2, 3.3.0, and an outdated built of 3.4. It looks 
like all versions of Python 3 are affected.




More information about the Python-list mailing list