[Python-es] scope de variables

Rolando Espinoza La Fuente darkrho en gmail.com
Vie Jun 18 19:43:38 CEST 2010


On Fri, Jun 18, 2010 at 7:49 AM, Dr. Bobus <drbobus en gulic.org> wrote:
> Hola todos:
>
> Me he enganchado en algo que supongo será una trivialidad, pero enganchado estoy.
>
> He puesto un esqueleto de mi programa en:
>
> http://snipt.org/Qkkh
>
> Obtengo error (NameError: name 'cmasa' is not defined) en la linea 13 de forma sistemática.
>
> No acabo de entender lo que estoy haciendo mal.

Obviamente tienes un problema de scope. A través de eval estas
queriendo obtener el valor dinámicamente,
pero dentro el scope de eval no esta definida la variable en cuestión.

Tienes algo así:

def main():
    def do_stuff(var):
        value = eval(var)
        print value

    cmasa = "foo"
    do_stuff("cmasa")


Y la definición de eval:
    eval(source[, globals[, locals]]) -> value

entonces funcionaría de la siguiente manera

def main():
    def do_stuff(var, global_vars={}):
        value = eval(var, global_vars)
        print value

    cmasa = "foo"
    do_stuff("cmasa", locals())


locals() dentro main retornaría un dic similar a:
{ "do_stuff": <method>, "cmasa": "foo" }

~Rolando


Más información sobre la lista de distribución Python-es