Articles of scope de

error de scope en el cierre recursivo

¿Por qué funciona esto? def function1(): a = 10 def function2(): print a function2() pero esto no lo hace: def function1(): a = 10 def function2(): print a a -= 1 if a>0: function2() function2() Me sale este error: UnboundLocalError: local variable ‘a’ referenced before assignment

__main__ y scope en python

De alguna manera me sorprendió el siguiente comportamiento: def main(): print “%s” % foo if __name__ == “__main__”: foo = “bar” main() es decir, una función de módulo tiene acceso a las variables __main__ en __main__ . ¿Cuál es la explicación para ello?

Usando una variable en una sentencia try, catch, finally sin declararla afuera

Soy bastante nuevo en Python, aquí hay un código que estoy viendo: try: connection = getConnection(database) cursor = connection.cursor() cursor.execute(“some query”) except: log.error(“Problem.”) raise finally: cursor.close() connection.close() ¿Se está limpiando adecuadamente? En otros idiomas en los que he escrito, estoy acostumbrado a hacer algo como esto: connection = None cursor = None try: connection = […]

Dudas sobre el scope de la variable de Python

Posible duplicado: Breve descripción de las reglas de scope de Python Escribí dos funciones simples: # coding: utf-8 def test(): var = 1 def print_var(): print var print_var() print var test() # 1 # 1 def test1(): var = 2 def print_var(): print var var = 3 print_var() print var test1() # raise Exception En […]

¿Cómo se pueden crear nuevos ámbitos en python?

En muchos idiomas (y lugares) hay una buena práctica de crear ámbitos locales mediante la creación de un bloque como este . void foo() { … Do some stuff … if(TRUE) { char a; int b; … Do some more stuff … } … Do even more stuff … } ¿Cómo puedo implementar esto en […]

“Variable local referenciada antes de la asignación”: ¿solo funciones?

Toma el siguiente código: import something def Foo(): something = something.SomeClass() return something … Al parecer, este código no es válido: UnboundLocalError: local variable ‘something’ referenced before assignment … Como la variable local, something se crea, pero no se asigna, antes de que se evalúe el RHS de = . (Vea, por ejemplo, el comentario […]

Globos de Python, locales y UnboundLocalError

Me encontré con este caso de UnboundLocalError recientemente, lo que parece extraño: import pprint def main(): if ‘pprint’ in globals(): print ‘pprint is in globals()’ pprint.pprint(‘Spam’) from pprint import pprint pprint(‘Eggs’) if __name__ == ‘__main__’: main() Lo que produce: pprint is in globals() Traceback (most recent call last): File “weird.py”, line 9, in if __name__ […]

python: ¿Cómo capturo una variable declarada en un ámbito externo ancestral no global?

Dado: def f(): x = 0 def g(): h() def h(): x += 1 print(x) g() >>> f() Traceback (most recent call last): File “”, line 1, in File “”, line 8, in f File “”, line 4, in g File “”, line 6, in h UnboundLocalError: local variable ‘x’ referenced before assignment >>> ¿Cómo […]

Reglas de scope de clase de Python

EDITAR: Parece que esto es un “error” muy antiguo o, en realidad, característica. Ver, por ejemplo, este correo Estoy tratando de entender las reglas de scope de Python. Más precisamente, pensé que los entendía pero luego encontré este código aquí : x = “xtop” y = “ytop” def func(): x = “xlocal” y = “ylocal” […]

Función de enlace de nombre local desde un ámbito externo

Necesito una forma de “inyectar” nombres en una función desde un bloque de código externo, para que sean accesibles localmente y no necesiten ser manejados específicamente por el código de la función (definido como parámetros de función, cargado desde *args etc.) El escenario simplificado: proporciona un marco dentro del cual los usuarios pueden definir (con […]