Es necesario declarar G
como global
, pero en cuanto a por qué: cuando se hace referencia a una variable dentro de una función, si configurar la variable en cualquier lugar en esa función, Python supone que es una variable local. Entonces, si una variable local con ese nombre no existe en ese punto del código, obtendrá el UnboundLocalError
. Si realmente quiso referirse a una variable global, como en su pregunta, necesita la palabra clave global
para decirle a Python que eso es lo que usted quiso decir.
Si no se asigna a la variable en ninguna parte de la función, pero solo tiene acceso a su valor, Python usará la variable global con ese nombre, si existe. Por lo que podría hacer:
G = None
def foo():
if G is None:
print G
foo()
impresiones de este código None
y no tirar la UnboundLocalError.
s/variables/names/g s/assign to/bind to/g –
Sí, se puede usar una terminología diferente, pero siempre que Python hable de "variables" y "asignación" en el mensaje de error (como aparece en la pregunta original), creo que dicha terminología es perfectamente aceptable al explicar el problema. –
¡Punto tomado! La referencia del lenguaje no siempre es siempre consistente en el asunto, tampoco. –