error de syntax en una statement no local en Python

Me gustaría probar el ejemplo del uso de la statement no local especificada en la respuesta a esta pregunta:

def outer(): x = 1 def inner(): nonlocal x x = 2 print("inner:", x) inner() print("outer:", x) 

pero cuando bash cargar este código, siempre aparece un error de syntax:

 Traceback (most recent call last): File "", line 1, in  File "t.py", line 4 nonlocal x ^ SyntaxError: invalid syntax 

¿Alguien sabe qué estoy haciendo mal aquí? (Recibo el error de syntax para cada ejemplo que uso, que contiene nonlocal ).

nonlocal solo funciona en Python 3; Es una nueva incorporación al lenguaje .

En Python 2 generará un error de syntax; python ve el nonlocal como parte de una expresión en lugar de una statement.

Este ejemplo específico funciona bien cuando realmente usas la versión correcta de Python:

 $ python3.3 Python 3.3.0 (default, Sep 29 2012, 08:16:08) [GCC 4.2.1 Compatible Apple Clang 3.1 (tags/Apple/clang-318.0.58)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> def outer(): ... x = 1 ... def inner(): ... nonlocal x ... x = 2 ... print("inner:", x) ... inner() ... print("outer:", x) ... 

Los nombres que aparecen en una statement no local no deben coincidir con los enlaces preexistentes en el ámbito local.

https://docs.python.org/3/reference/simple_stmts.html#the-nonlocal-statement

 def outer(): x = 1 def inner(): nonlocal x y = 2 x = y print("inner: ", x) inner() print("outer: ", x) 
 >>> outer() inner: 2 outer: 2