Quiero ejecutar algún código Python, escrito en tiempo de ejecución, por lo que obtener la cadena y llameEl uso de exec() con las funciones recursivas
exec(pp, globals(), locals())
donde pp es la cadena. Funciona bien, excepto para llamadas recursivas, e. Ej., Por ejemplo, el código es correcto:
def horse():
robot.step()
robot.step()
robot.turn(-1)
robot.step()
while True:
horse()
Pero éste no es:
def horse():
robot.step()
robot.step()
robot.turn(-1)
robot.step()
horse()
horse()
NameError: global name 'horse' is not defined
¿Hay una manera de ejecutar código recursivo así?
ACTUALIZACIÓN
a = """\
def rec(n):
if n > 10:
return
print n
return rec(n+1)
rec(5)"""
exec(a)
Works si se pone en el nivel superior. Pero si se mueve dentro de una función:
def fn1():
a = """\
def rec(n):
if n > 10:
return
print n
return rec(n+1)
rec(5)"""
exec(a)
fn1()
se produce el mismo error: NameError: nombre de 'REC' global no está definido
Por favor dígame esta cadena ejecutivo no es de usuario entrada. –
@Nadia, por qué, sí, es _ :) – Headcrab